diff options
-rw-r--r-- | queue_epoll.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/queue_epoll.c b/queue_epoll.c index 4112377..90d0d89 100644 --- a/queue_epoll.c +++ b/queue_epoll.c @@ -55,11 +55,20 @@ __attribute__((constructor)) static void epoll_ctl_mod_buggy_detect(void) if (version <= 2) epoll_ctl_mod_buggy = true; - /* 2.6.32.61 is OK */ - if (version == 2 && patchlevel == 6 && sublevel == 32) { + /* 2.6.32.61+ and 2.6.34.15+ are OK */ + if (version == 2 && patchlevel == 6 && + (sublevel == 32 || sublevel == 34)) { rc = sscanf(buf.release, "%u.%u.%u.%u", &version, &patchlevel, &sublevel, &extra); - epoll_ctl_mod_buggy = (rc == 4) && (extra < 61); + if (rc != 4) + return; + + if (sublevel == 32) + epoll_ctl_mod_buggy = extra < 61; /* 2.6.32.61+ */ + else if (sublevel == 34) + epoll_ctl_mod_buggy = extra < 15; /* 2.6.34.15+ */ + else + assert("buggy version check for 2.6.32.61/2.6.34.15"); } if (version != 3) |