]> granicus.if.org Git - libevent/commitdiff
fix off by one errors in devpoll; from Ian Bell
authorNiels Provos <provos@gmail.com>
Fri, 25 Jul 2008 01:18:40 +0000 (01:18 +0000)
committerNiels Provos <provos@gmail.com>
Fri, 25 Jul 2008 01:18:40 +0000 (01:18 +0000)
svn:r921

ChangeLog
devpoll.c

index 34def8286c1559a92d5df19dd629b7e7e730cabb..e9b61f48d051c15bff7011360d087dbea87a4489 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -119,6 +119,8 @@ Changes in current version:
  o Fix a bug where deleting signals with the kqueue backend would cause subsequent adds to fail
  o Support multiple events listening on the same signal; make signals regular events that go on the same event queue; problem report by Alexander Drozdov.
  o Fix a problem with epoll() and reinit; problem report by Alexander Drozdov. 
+ o Fix off-by-one errors in devpoll; from Ian Bell
+       
 Changes in 1.4.0:
  o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr.
  o demote most http warnings to debug messages
index c40a718d85ff7f1bbbf2795978d9121e58f57270..2fbb03ca84012ff11ca094cf74483907d5c4bcdd 100644 (file)
--- a/devpoll.c
+++ b/devpoll.c
@@ -137,7 +137,7 @@ devpoll_init(struct event_base *base)
 
        if (getrlimit(RLIMIT_NOFILE, &rl) == 0 &&
            rl.rlim_cur != RLIM_INFINITY)
-               nfiles = rl.rlim_cur - 1;
+               nfiles = rl.rlim_cur;
 
        /* Initialize the kernel queue */
        if ((dpfd = open("/dev/poll", O_RDWR)) == -1) {
@@ -185,12 +185,12 @@ devpoll_recalc(struct event_base *base, void *arg, int max)
 {
        struct devpollop *devpollop = arg;
 
-       if (max > devpollop->nfds) {
+       if (max >= devpollop->nfds) {
                struct evdevpoll *fds;
                int nfds;
 
                nfds = devpollop->nfds;
-               while (nfds < max)
+               while (nfds <= max)
                        nfds <<= 1;
 
                fds = mm_realloc(devpollop->fds, nfds * sizeof(struct evdevpoll));