summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kneschke <jan@kneschke.de>2005-09-01 07:47:40 +0000
committerJan Kneschke <jan@kneschke.de>2005-09-01 07:47:40 +0000
commit478053510bac72960b77cb68b3a5b167f3c8d6cd (patch)
tree003fc51975e57561891051d86d69e1c77577413e
parente45388fc446e52d968630b677bccb445d9d692fa (diff)
downloadlighttpd-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.c12
-rw-r--r--src/fdevent_solaris_devpoll.c31
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;
}