X-Git-Url: https://git.llucax.com/software/libev.git/blobdiff_plain/22b2a449105d7604f715c1afafeb4fe5ac473f1b..0f411518435b7edf24d4bddcc86e5958f7e3d23f:/ev.c?ds=sidebyside diff --git a/ev.c b/ev.c index 2db968e..255bb84 100644 --- a/ev.c +++ b/ev.c @@ -234,6 +234,9 @@ ev_now (EV_P) cur = newcnt; \ } +#define array_free(stem, idx) \ + free (stem ## s idx); stem ## cnt idx = stem ## max idx = 0; + /*****************************************************************************/ static void @@ -636,6 +639,8 @@ loop_init (EV_P_ int methods) void loop_destroy (EV_P) { + int i; + #if EV_USE_WIN32 if (method == EVMETHOD_WIN32 ) win32_destroy (EV_A); #endif @@ -652,6 +657,16 @@ loop_destroy (EV_P) if (method == EVMETHOD_SELECT) select_destroy (EV_A); #endif + for (i = NUMPRI; i--; ) + array_free (pending, [i]); + + array_free (fdchange, ); + array_free (timer, ); + array_free (periodic, ); + array_free (idle, ); + array_free (prepare, ); + array_free (check, ); + method = 0; /*TODO*/ } @@ -795,8 +810,7 @@ call_pending (EV_P) if (p->w) { p->w->pending = 0; - - (*(void (**)(EV_P_ W, int))&p->w->cb) (EV_A_ p->w, p->events); + p->w->cb (EV_A_ p->w, p->events); } } }