diff options
author | Michael Biebl <biebl@debian.org> | 2011-03-13 12:09:06 +0100 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2011-03-14 09:18:43 +0100 |
commit | 4671cad51221f1cb03822481e46669ffba3c6d95 (patch) | |
tree | 61629a4d678a2dbf0b67d61f27200109248c2823 /plugins/imptcp/imptcp.c | |
parent | 6dbd70732a19a13bacae7b4bea07097458974cc9 (diff) | |
download | rsyslog-4671cad51221f1cb03822481e46669ffba3c6d95.tar.gz rsyslog-4671cad51221f1cb03822481e46669ffba3c6d95.tar.bz2 rsyslog-4671cad51221f1cb03822481e46669ffba3c6d95.zip |
Fall back to epoll_create() if epoll_create1() is not available
epoll_create1() was introduced in Linux kernel 2.6.27. If rsyslog was
compiled on a newer kernel but run on a kernel older than 2.6.27, remote
syslog fails. Apply a runtime check for epoll_create1() and fall back to
epoll_create() in this case.
Bug-Debian: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=617996
Diffstat (limited to 'plugins/imptcp/imptcp.c')
-rw-r--r-- | plugins/imptcp/imptcp.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/plugins/imptcp/imptcp.c b/plugins/imptcp/imptcp.c index 3197564e..c4fbab3d 100644 --- a/plugins/imptcp/imptcp.c +++ b/plugins/imptcp/imptcp.c @@ -1047,17 +1047,20 @@ CODESTARTwillRun ABORT_FINALIZE(RS_RET_NO_RUN); } -# if defined(EPOLL_CLOEXEC) && defined(HAVE_EPOLL_CREATE1) - DBGPRINTF("imptcp uses epoll_create1()\n"); - epollfd = epoll_create1(EPOLL_CLOEXEC); -# else +#if defined(EPOLL_CLOEXEC) && defined(HAVE_EPOLL_CREATE1) + DBGPRINTF("imptcp uses epoll_create1()\n"); + epollfd = epoll_create1(EPOLL_CLOEXEC); + if(epollfd < 0 && errno ENOSYS) +#endif + { DBGPRINTF("imptcp uses epoll_create()\n"); /* reading the docs, the number of epoll events passed to * epoll_create() seems not to be used at all in kernels. So * we just provide "a" number, happens to be 10. */ epollfd = epoll_create(10); -# endif + } + if(epollfd < 0) { errmsg.LogError(0, RS_RET_EPOLL_CR_FAILED, "error: epoll_create() failed"); ABORT_FINALIZE(RS_RET_NO_RUN); |