[Spread-users] possible memory leak in spread daemon
Theo Schlossnagle
jesus at omniti.com
Sat Feb 21 21:13:19 EST 2004
On Feb 21, 2004, at 8:34 PM, Taj Khattra wrote:
> (1) there is no call to sl_remove_all() when MembersList is empty in
> G_handle_leave()
that should be looked into. sounds suspicious.
> (2) sl_remove_all() doesn't free the memory allocated for sl->index
> in sl_init()
>
> i'm not sure if this is the correct fix or not, but i added the line
>
> if (sl->index != NULL) free(sl->index)
>
> to sl_remove_all() and added a call to sl_remove_all() in
> G_handle_leave()
> in the "if (grp->num_members == 0)" block and the leak went away.
That isn't a good approach. In my private copy of the skiplist
implementation, there is another call added. to actually free the
skiplist internals too.
sl_remove_all() was designed to remove all the elements. If you also
remove the index, you alter the "properties" of the skiplist if you
were to then add elements to it.
In my API here I have an sl_destruct(Skiplist *sl) that performs that
same tasks as sl_remove_all, but also frees other internals. I'll see
about applying it to the current Spread tree and sending in a patch.
// Theo Schlossnagle
// Principal Engineer -- http://www.omniti.com/~jesus/
// Postal Engine -- http://www.postalengine.com/
// Ecelerity: fastest MTA on Earth
More information about the Spread-users
mailing list