]> git.saurik.com Git - redis.git/blobdiff - src/ae_kqueue.c
Another fix for MIGRATE.
[redis.git] / src / ae_kqueue.c
index 6bf64f4ef868be13203ebfb2aefd70a6f9dfe9f1..e91a254d524af1879d3f9919f8b358f16094d1e4 100644 (file)
@@ -8,15 +8,21 @@
 
 typedef struct aeApiState {
     int kqfd;
-    struct kevent events[AE_SETSIZE];
+    struct kevent *events;
 } aeApiState;
 
 static int aeApiCreate(aeEventLoop *eventLoop) {
     aeApiState *state = zmalloc(sizeof(aeApiState));
 
     if (!state) return -1;
+    state->events = zmalloc(sizeof(struct kevent)*eventLoop->setsize);
+    if (!state->events) {
+        zfree(state);
+        return -1;
+    }
     state->kqfd = kqueue();
     if (state->kqfd == -1) {
+        zfree(state->events);
         zfree(state);
         return -1;
     }
@@ -29,6 +35,7 @@ static void aeApiFree(aeEventLoop *eventLoop) {
     aeApiState *state = eventLoop->apidata;
 
     close(state->kqfd);
+    zfree(state->events);
     zfree(state);
 }
 
@@ -69,10 +76,12 @@ static int aeApiPoll(aeEventLoop *eventLoop, struct timeval *tvp) {
         struct timespec timeout;
         timeout.tv_sec = tvp->tv_sec;
         timeout.tv_nsec = tvp->tv_usec * 1000;
-        retval = kevent(state->kqfd, NULL, 0, state->events, AE_SETSIZE, &timeout);
+        retval = kevent(state->kqfd, NULL, 0, state->events, eventLoop->setsize,
+                        &timeout);
     } else {
-        retval = kevent(state->kqfd, NULL, 0, state->events, AE_SETSIZE, NULL);
-    }    
+        retval = kevent(state->kqfd, NULL, 0, state->events, eventLoop->setsize,
+                        NULL);
+    }
 
     if (retval > 0) {
         int j;