Commit 9e0d86da authored by Garrett Rooney's avatar Garrett Rooney
Browse files

Stop holding open connections to the backend fastcgi processes. At

this point we lack a good way to manage them, and thus it's really
easy to end up with situations where you get weird timeouts because
other worker process are holding all the connections open.

This allows Rails applications to reliably work with mod_proxy_fcgi.

* modules/proxy/mod_proxy_fcgi.c
  (dispatch): Add a timeout for our poll.  This should be controlled
   by a config option of some sort, but for now just hardcode it.
  (proxy_fcgi_handler): Set close_on_recycle to 1, so we don't hold
   open connections to the fastcgi processes.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/fcgi-proxy-dev@383278 13f79535-47bb-0310-9956-ffa450edef68
parent 984c7cc6
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -527,7 +527,8 @@ static apr_status_t dispatch(proxy_conn_rec *conn, request_rec *r,
        apr_size_t len;
        int n;

        rv = apr_poll(&pfd, 1, &n, -1);
        /* XXX don't hardcode 30 seconds */
        rv = apr_poll(&pfd, 1, &n, apr_time_from_sec(30));
        if (rv != APR_SUCCESS) {
            break;
        }
@@ -881,7 +882,13 @@ static int proxy_fcgi_handler(request_rec *r, proxy_worker *worker,
    }

    backend->is_ssl = 0;
    backend->close_on_recycle = 0;

    /* XXX Setting close_on_recycle to 0 is a great way to end up with
     *     timeouts at this point, since we lack good ways to manage the
     *     back end fastcgi processes.  This should be revisited when we
     *     have a better story on that part of things. */

    backend->close_on_recycle = 1;

    /* Step One: Determine Who To Connect To */
    status = ap_proxy_determine_connection(p, r, conf, worker, backend,