summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorMichael Biebl <biebl@debian.org>2011-03-13 12:09:06 +0100
committerRainer Gerhards <rgerhards@adiscon.com>2011-03-14 09:18:43 +0100
commit4671cad51221f1cb03822481e46669ffba3c6d95 (patch)
tree61629a4d678a2dbf0b67d61f27200109248c2823 /plugins
parent6dbd70732a19a13bacae7b4bea07097458974cc9 (diff)
downloadrsyslog-4671cad51221f1cb03822481e46669ffba3c6d95.tar.gz
rsyslog-4671cad51221f1cb03822481e46669ffba3c6d95.tar.xz
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')
-rw-r--r--plugins/imptcp/imptcp.c13
-rw-r--r--plugins/imudp/imudp.c13
2 files changed, 16 insertions, 10 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);
diff --git a/plugins/imudp/imudp.c b/plugins/imudp/imudp.c
index 56cdab28..a5002591 100644
--- a/plugins/imudp/imudp.c
+++ b/plugins/imudp/imudp.c
@@ -453,13 +453,16 @@ rsRetVal rcvMainLoop(thrdInfo_t *pThrd)
CHKmalloc(udpEPollEvt = calloc(udpLstnSocks[0], sizeof(struct epoll_event)));
-# if defined(EPOLL_CLOEXEC) && defined(HAVE_EPOLL_CREATE1)
- DBGPRINTF("imudp uses epoll_create1()\n");
- efd = epoll_create1(EPOLL_CLOEXEC);
-# else
+#if defined(EPOLL_CLOEXEC) && defined(HAVE_EPOLL_CREATE1)
+ DBGPRINTF("imudp uses epoll_create1()\n");
+ efd = epoll_create1(EPOLL_CLOEXEC);
+ if(efd < 0 && errno == ENOSYS)
+#endif
+ {
DBGPRINTF("imudp uses epoll_create()\n");
efd = epoll_create(NUM_EPOLL_EVENTS);
-# endif
+ }
+
if(efd < 0) {
DBGPRINTF("epoll_create1() could not create fd\n");
ABORT_FINALIZE(RS_RET_IO_ERROR);