Duma and libev, cont'd....and a leak found
Michael Leib
michael.leib at hypermediasystems.com
Thu Jun 19 22:22:20 CEST 2008
Hello..
I appreciate the response I received to my previous request of help with the integration of duma into libev. I have
resolved that issue which was, glady, my own. Albiet embarrassed, it appears it was worth the effort to get this
working as I have found what I belive is a memory leak in libev when dealing with signals and the deafult loop.
Since the default loop has 1 signal set by default (childev), even if the signal api's are not used (ev_siginal_init(), etc)
by the binding application, it would still have this issue for anyone who uses the library.
The "signals" array is never freed, with particular attention to the ev_default_destroy() function.
Rather than going into a bunch of details, the code pretty much speaks for itself as to what is the perceived problem
which is/are:
1) The "signals" array is never freed
2) Pending signal events are not restored to to system default handling when the default loop is destroyed.
What is:
void
ev_default_destroy (void)
{
#if EV_MULTIPLICITY
struct ev_loop *loop = ev_default_loop_ptr;
#endif
#ifndef _WIN32
ev_ref (EV_A); /* child watcher */
ev_signal_stop (EV_A_ &childev);
#endif
loop_destroy (EV_A);
}
Has been changed in my version to:
void
ev_default_destroy (void)
{
#if EV_MULTIPLICITY
struct ev_loop *loop = ev_default_loop_ptr;
#endif
#ifndef _WIN32
int signum;
ev_ref (EV_A); /* child watcher */
for ( signum = signalmax; signum--; ) {
if ( signals [signum].gotsig )
signal (signum, SIG_DFL);
}
ev_free (signals); signalmax = 0;
#endif
loop_destroy (EV_A);
}
Now, this works for me but I would love to know if you have any comments about my change (good or bad) or anything
I may have missed? Although obviously not the only solution, this one works for my observed issues. If you have something
better, I'd love to see it and I would, of course, replace that into what I am working with rather than my change.
I hope this e-mail brings out a shortcoming and provides a solution. I would not have caught this without duma.
Thanks in advance,
Michael
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.schmorp.de/pipermail/libev/attachments/20080619/96d3768f/attachment.html>
More information about the libev
mailing list