summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ev.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/ev.c b/ev.c
index 2db968e..9ef3d13 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*/
}
@@ -796,7 +811,7 @@ call_pending (EV_P)
{
p->w->pending = 0;
- (*(void (**)(EV_P_ W, int))&p->w->cb) (EV_A_ p->w, p->events);
+ ((void (*)(EV_P_ W, int))p->w->cb) (EV_A_ p->w, p->events);
}
}
}