diff options
author | Jan Kneschke <jan@kneschke.de> | 2005-09-01 07:47:40 +0000 |
---|---|---|
committer | Jan Kneschke <jan@kneschke.de> | 2005-09-01 07:47:40 +0000 |
commit | 478053510bac72960b77cb68b3a5b167f3c8d6cd (patch) | |
tree | 003fc51975e57561891051d86d69e1c77577413e | |
parent | e45388fc446e52d968630b677bccb445d9d692fa (diff) | |
download | lighttpd-git-478053510bac72960b77cb68b3a5b167f3c8d6cd.tar.gz |
only try to open the event-handler, but close right away as we have to open it AFTER the daemonize again
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-merge-1.4.x@665 152afb58-edef-0310-8abb-c4023f1b3aa9
-rw-r--r-- | src/fdevent_freebsd_kqueue.c | 12 | ||||
-rw-r--r-- | src/fdevent_solaris_devpoll.c | 31 |
2 files changed, 36 insertions, 7 deletions
diff --git a/src/fdevent_freebsd_kqueue.c b/src/fdevent_freebsd_kqueue.c index 1f6a6fcb..b9557269 100644 --- a/src/fdevent_freebsd_kqueue.c +++ b/src/fdevent_freebsd_kqueue.c @@ -181,6 +181,18 @@ int fdevent_freebsd_kqueue_init(fdevents *ev) { ev->kq_results = calloc(ev->maxfds, sizeof(*ev->kq_results)); ev->kq_bevents = bitset_init(ev->maxfds); + /* check that kqueue works */ + + if (-1 == (ev->kq_fd = kqueue())) { + fprintf(stderr, "%s.%d: kqueue failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n", + __FILE__, __LINE__, strerror(errno)); + + return -1; + } + + close(ev->kq_fd); + ev->kq_fd = -1; + return 0; } #else diff --git a/src/fdevent_solaris_devpoll.c b/src/fdevent_solaris_devpoll.c index 7e6680c1..91238b00 100644 --- a/src/fdevent_solaris_devpoll.c +++ b/src/fdevent_solaris_devpoll.c @@ -93,6 +93,26 @@ static int fdevent_solaris_devpoll_event_next_fdndx(fdevents *ev, int last_ndx) return i; } +int fdevent_solaris_devpoll_reset(fdevents *ev) { + /* a forked process does only inherit the filedescriptor, + * but every operation on the device will lead to a EACCES */ + if ((ev->devpoll_fd = open("/dev/poll", O_RDWR)) < 0) { + fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n", + __FILE__, __LINE__, strerror(errno)); + + return -1; + } + + if (fcntl(ev->devpoll_fd, F_SETFD, FD_CLOEXEC) < 0) { + fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n", + __FILE__, __LINE__, strerror(errno)); + + close(ev->devpoll_fd); + + return -1; + } + return 0; +} int fdevent_solaris_devpoll_init(fdevents *ev) { ev->type = FDEVENT_HANDLER_SOLARIS_DEVPOLL; #define SET(x) \ @@ -100,6 +120,7 @@ int fdevent_solaris_devpoll_init(fdevents *ev) { SET(free); SET(poll); + SET(reset); SET(event_del); SET(event_add); @@ -116,15 +137,11 @@ int fdevent_solaris_devpoll_init(fdevents *ev) { return -1; } - - if (fcntl(ev->devpoll_fd, F_SETFD, FD_CLOEXEC) < 0) { - fprintf(stderr, "%s.%d: opening /dev/poll failed (%s), try to set server.event-handler = \"poll\" or \"select\"\n", - __FILE__, __LINE__, strerror(errno)); - close(ev->devpoll_fd); + /* we just wanted to check if it works */ + close(ev->devpoll_fd); - return -1; - } + ev->devpoll_fd = -1; return 0; } |