diff options
author | antirez <antirez@gmail.com> | 2011-12-15 11:42:40 +0100 |
---|---|---|
committer | antirez <antirez@gmail.com> | 2011-12-15 11:42:40 +0100 |
commit | e074416be49947c7bab5e237fab7210441bd99e5 (patch) | |
tree | e126e02f9fca9f4ed38fe58d9d2e622257c46369 /src/ae_kqueue.c | |
parent | 503d87a818ffd11c275bba6479bcd5b4a855e8ca (diff) | |
download | redis-e074416be49947c7bab5e237fab7210441bd99e5.tar.gz |
Max limit to 10k clients removed, this implements feature request on issue #194
Diffstat (limited to 'src/ae_kqueue.c')
-rw-r--r-- | src/ae_kqueue.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/src/ae_kqueue.c b/src/ae_kqueue.c index 6bf64f4ef..e91a254d5 100644 --- a/src/ae_kqueue.c +++ b/src/ae_kqueue.c @@ -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; |