From e7def825a83101bec5a432e56728a15eea2eb4e9 Mon Sep 17 00:00:00 2001 From: Jan Kneschke Date: Thu, 5 May 2005 08:15:05 +0000 Subject: [PATCH] remove FDEVENT_OUT as soon as we hit _READ and only call joblist_append() if really needed git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/lighttpd-1.3.x@343 152afb58-edef-0310-8abb-c4023f1b3aa9 --- src/mod_fastcgi.c | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/mod_fastcgi.c b/src/mod_fastcgi.c index c8576dc7..6affd929 100644 --- a/src/mod_fastcgi.c +++ b/src/mod_fastcgi.c @@ -750,8 +750,11 @@ static int fcgi_spawn_connection(server *srv, /* create socket */ if (-1 == bind(fcgi_fd, fcgi_addr, servlen)) { - log_error_write(srv, __FILE__, __LINE__, "ss", - "bind failed:", strerror(errno)); + log_error_write(srv, __FILE__, __LINE__, "sbds", + "bind failed for:", + proc->socket, + proc->port, + strerror(errno)); return -1; } @@ -2360,8 +2363,17 @@ static handler_t fcgi_write_request(server *srv, handler_ctx *hctx) { /* sanity check */ if (!host || - ((!host->host->used || !host->port) && !host->unixsocket->used)) return HANDLER_ERROR; + ((!host->host->used || !host->port) && !host->unixsocket->used)) { + log_error_write(srv, __FILE__, __LINE__, "sxddd", + "write-req: error", + host, + host->host->used, + host->port, + host->unixsocket->used); + return HANDLER_ERROR; + } + switch(hctx->state) { case FCGI_STATE_INIT: r = host->unixsocket->used ? AF_UNIX : AF_INET; @@ -2546,15 +2558,15 @@ static handler_t fcgi_write_request(server *srv, handler_ctx *hctx) { hctx->write_offset += r; if (hctx->write_offset == hctx->write_buffer->used) { + /* we don't need the out event anymore */ + fdevent_event_del(srv->ev, &(hctx->fde_ndx), hctx->fd); + fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN); fcgi_set_state(srv, hctx, FCGI_STATE_READ); } break; case FCGI_STATE_READ: /* waiting for a response */ - - fdevent_event_add(srv->ev, &(hctx->fde_ndx), hctx->fd, FDEVENT_IN); - break; default: log_error_write(srv, __FILE__, __LINE__, "s", "(debug) unknown state"); @@ -2656,6 +2668,7 @@ SUBREQUEST_FUNC(mod_fastcgi_handle_subrequest) { case HANDLER_WAIT_FOR_FD: return HANDLER_WAIT_FOR_FD; default: + log_error_write(srv, __FILE__, __LINE__, "s", "subrequest write-req default"); return HANDLER_ERROR; } } @@ -2693,8 +2706,6 @@ static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) { fcgi_proc *proc = hctx->proc; fcgi_extension_host *host= hctx->host; - joblist_append(srv, con); - if ((revents & FDEVENT_IN) && hctx->state == FCGI_STATE_READ) { switch (fcgi_demux_response(srv, hctx)) { @@ -2724,6 +2735,7 @@ static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) { fcgi_connection_cleanup(srv, hctx); } + joblist_append(srv, con); return HANDLER_FINISHED; case -1: if (proc->pid && proc->state != PROC_STATE_DIED) { @@ -2805,6 +2817,7 @@ static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) { /* */ + joblist_append(srv, con); return HANDLER_FINISHED; } } @@ -2858,6 +2871,7 @@ static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) { connection_set_state(srv, con, CON_STATE_ERROR); fcgi_connection_close(srv, hctx); + joblist_append(srv, con); } } else if (revents & FDEVENT_ERR) { log_error_write(srv, __FILE__, __LINE__, "s", @@ -2867,6 +2881,7 @@ static handler_t fcgi_handle_fdevent(void *s, void *ctx, int revents) { connection_set_state(srv, con, CON_STATE_ERROR); fcgi_connection_close(srv, hctx); + joblist_append(srv, con); } return HANDLER_FINISHED;