]> 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 3a177c587b804fd80050d8cb543f940a9ce02ff1..9674c7c056c75b7192c3fe8608a54a8e5dc5e57a 100644 (file)
--- a/ev.c
+++ b/ev.c
 # define EV_USE_EPOLL 0
 #endif
 
+#ifndef CLOCK_REALTIME
+# define EV_USE_REALTIME 0
+#endif
 #ifndef EV_USE_REALTIME
 # define EV_USE_REALTIME 1 /* posix requirement, but might be slower */
 #endif
 
 #define MIN_TIMEJUMP  1. /* minimum timejump that gets detected (if monotonic clock available) */
-#define MAX_BLOCKTIME 59.731
-#define PID_HASHSIZE  16 /* size of pid hahs table, must be power of two */
+#define MAX_BLOCKTIME 59.731 /* never wait longer than this time (to detetc time jumps) */
+#define PID_HASHSIZE  16 /* size of pid hash table, must be power of two */
+#define CLEANUP_INTERVAL (MAX_BLOCKTIME * 5.) /* how often to try to free memory and re-check fds */
 
 #include "ev.h"
 
@@ -166,6 +170,12 @@ static int pendingmax, pendingcnt;
 static void
 event (W w, int events)
 {
+  if (w->pending)
+    {
+      pendings [w->pending - 1].events |= events;
+      return;
+    }
+
   w->pending = ++pendingcnt;
   array_needsize (pendings, pendingmax, pendingcnt, );
   pendings [pendingcnt - 1].w      = w;
@@ -253,8 +263,8 @@ fd_recheck (void)
       if (fcntl (fd, F_GETFD) == -1 && errno == EBADF)
         while (anfds [fd].head)
           {
-            event ((W)anfds [fd].head, EV_ERROR | EV_READ | EV_WRITE | EV_TIMEOUT);
             ev_io_stop (anfds [fd].head);
+            event ((W)anfds [fd].head, EV_ERROR | EV_READ | EV_WRITE | EV_TIMEOUT);
           }
 }