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 of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
