]> git.llucax.com Git - software/libev.git/blobdiff - ev.c
*** empty log message ***
[software/libev.git] / ev.c
diff --git a/ev.c b/ev.c
index 2db968e4716902a3ca978f8e2d3130272a53e116..255bb8457de54795ccc86bf3057729f288cff9f6 100644 (file)
--- 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);
           }
       }
 }