epoll_wait() never return even though not specifying a timeout of -1
Issue
- The actual implementation of epoll_wait() system call does not conform to the manual page.
- According to the manual, epoll_wait() is expected to wait for a maximum time of "timeout" milliseconds. Since the "timeout" is type of (int), one can specify a value of between 1 and INT_MAX for it (both -1 and 0 have special meanings).
-
But if one actually specify a timeout of between EP_MAX_MSTIMEO and INT_MAX, epoll_wait() never return (where EP_MAX_MSTIMEO is 2,147,482) because of the following implementation:
[fs/eventpoll.c] 1495 static int ep_poll(struct eventpoll *ep, struct epoll_event __user *events, 1496 int maxevents, long timeout) : 1508 jtimeout = (timeout< 0 || timeout>= EP_MAX_MSTIMEO) ? 1509 MAX_SCHEDULE_TIMEOUT : (timeout * HZ + 999) / 1000; : 1539 jtimeout = schedule_timeout(jtimeout);
Environment
- Red Hat Enterprise Linux 5.6
- 2.6.18-238.el5PAE
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.