From e47ae00886f1ebc1737a7894ae91dc330d330255 Mon Sep 17 00:00:00 2001 From: Jan Kneschke Date: Tue, 30 Aug 2005 10:42:06 +0000 Subject: [PATCH] let kqueue startup after daemonize is done git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-merge-1.4.x@650 152afb58-edef-0310-8abb-c4023f1b3aa9 --- src/connections.c | 4 +--- src/fdevent_freebsd_kqueue.c | 10 ++-------- src/network.c | 4 +++- src/server.c | 6 +++++- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/connections.c b/src/connections.c index 9f3e1c1a..99236c86 100644 --- a/src/connections.c +++ b/src/connections.c @@ -1064,7 +1064,6 @@ handler_t connection_handle_fdevent(void *s, void *context, int revents) { connection *connection_accept(server *srv, server_socket *srv_socket) { - int accepted_requests = 0; /* accept everything */ /* search an empty place */ @@ -1078,7 +1077,7 @@ connection *connection_accept(server *srv, server_socket *srv_socket) { if (-1 == (cnt = accept(srv_socket->fd, (struct sockaddr *) &cnt_addr, &cnt_len))) { if ((errno != EAGAIN) && (errno != EINTR)) { - log_error_write(srv, __FILE__, __LINE__, "ss", "accept failed: ", strerror(errno)); + log_error_write(srv, __FILE__, __LINE__, "ssd", "accept failed:", strerror(errno), errno); } return NULL; } else { @@ -1086,7 +1085,6 @@ connection *connection_accept(server *srv, server_socket *srv_socket) { srv->cur_fds++; - accepted_requests++; /* ok, we have the connection, register it */ #if 0 log_error_write(srv, __FILE__, __LINE__, "sd", diff --git a/src/fdevent_freebsd_kqueue.c b/src/fdevent_freebsd_kqueue.c index fdc41ff4..1f6a6fcb 100644 --- a/src/fdevent_freebsd_kqueue.c +++ b/src/fdevent_freebsd_kqueue.c @@ -149,8 +149,6 @@ static int fdevent_freebsd_kqueue_event_next_fdndx(fdevents *ev, int ndx) { } static int fdevent_freebsd_kqueue_reset(fdevents *ev) { - close(ev->kq_fd); - 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)); @@ -178,12 +176,8 @@ int fdevent_freebsd_kqueue_init(fdevents *ev) { SET(event_get_fd); SET(event_get_revent); - 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; - } + ev->kq_fd = -1; + ev->kq_results = calloc(ev->maxfds, sizeof(*ev->kq_results)); ev->kq_bevents = bitset_init(ev->maxfds); diff --git a/src/network.c b/src/network.c index c40077d4..eed044e2 100644 --- a/src/network.c +++ b/src/network.c @@ -406,7 +406,9 @@ int network_init(server *srv) { int network_register_fdevents(server *srv) { size_t i; - fdevent_reset(srv->ev); + if (-1 == fdevent_reset(srv->ev)) { + return -1; + } /* register fdevents after reset */ for (i = 0; i < srv->srv_sockets.used; i++) { diff --git a/src/server.c b/src/server.c index 017a6191..5c1b3339 100644 --- a/src/server.c +++ b/src/server.c @@ -670,7 +670,11 @@ int main (int argc, char **argv) { return -1; } - /* kqueue needs a reset AFTER daemonize() */ + /* + * kqueue() is called here, select resets its internals, + * all server sockets get their handlers + * + * */ if (0 != network_register_fdevents(srv)) { plugins_free(srv); network_close(srv);