--- /dev/null
+--- trunk/src/mod_proxy.c (revision 258)
++++ trunk/src/mod_proxy.c (revision 259)
+@@ -365,8 +365,6 @@
+ log_error_write(srv, __FILE__, __LINE__, "sdsd",
+ "connect failed:", proxy_fd, strerror(errno), errno);
+
+- proxy_connection_cleanup(srv, hctx);
+-
+ return -1;
+ }
+ }
+@@ -615,7 +613,7 @@
+ }
+
+
+-static int proxy_write_request(server *srv, handler_ctx *hctx) {
++static handler_t proxy_write_request(server *srv, handler_ctx *hctx) {
+ data_proxy *host= hctx->host;
+
+ int r;
+@@ -629,7 +627,7 @@
+
+ if (-1 == (hctx->fd->fd = socket(r, SOCK_STREAM, 0))) {
+ log_error_write(srv, __FILE__, __LINE__, "ss", "socket failed: ", strerror(errno));
+- return -1;
++ return HANDLER_ERROR;
+ }
+
+ srv->cur_fds++;
+@@ -639,9 +637,7 @@
+ if (-1 == fdevent_fcntl_set(srv->ev, hctx->fd)) {
+ log_error_write(srv, __FILE__, __LINE__, "ss", "fcntl failed: ", strerror(errno));
+
+- proxy_connection_cleanup(srv, hctx);
+-
+- return -1;
++ return HANDLER_ERROR;
+ }
+
+ /* fall through */
+@@ -706,10 +702,10 @@
+ break;
+ default:
+ log_error_write(srv, __FILE__, __LINE__, "s", "(debug) unknown state");
+- return -1;
++ return HANDLER_ERROR;
+ }
+
+- return 0;
++ return HANDLER_GO_ON;
+ }
+
+ #define PATCH(x) \
+@@ -779,7 +775,8 @@
+ if (con->mode != p->id) return HANDLER_GO_ON;
+
+ /* ok, create the request */
+- if (-1 == proxy_write_request(srv, hctx)) {
++ switch(proxy_write_request(srv, hctx)) {
++ case HANDLER_ERROR:
+ log_error_write(srv, __FILE__, __LINE__, "sbdd", "proxy-server disabled:",
+ host->host,
+ host->port,
+@@ -789,9 +786,17 @@
+ host->usage = -1;
+ host->disable_ts = srv->cur_ts;
+
++ proxy_connection_cleanup(srv, hctx);
++
+ con->mode = DIRECT;
+ con->http_status = 503;
+ return HANDLER_FINISHED;
++ case HANDLER_WAIT_FOR_EVENT:
++ return HANDLER_WAIT_FOR_EVENT;
++ case HANDLER_WAIT_FOR_FD:
++ return HANDLER_WAIT_FOR_FD;
++ default:
++ break;
+ }
+
+ if (con->file_started == 1) {