--- mod_proxy_fcgi.c +++ mod_proxy_fcgi.c 433c433 < apr_bucket_brigade *ib, *ob; --- > apr_bucket_brigade *ib, *ob, *cib; 441c441 < apr_pollfd_t pfd; --- > apr_pollfd_t pfd[2]; 453,457c453,461 < pfd.desc_type = APR_POLL_SOCKET; < pfd.desc.s = conn->sock; < pfd.p = r->pool; < pfd.reqevents = APR_POLLIN | APR_POLLOUT; < --- > pfd[0].desc_type = APR_POLL_SOCKET; > pfd[0].desc.s = conn->sock; > pfd[0].p = r->pool; > pfd[0].reqevents = APR_POLLIN | APR_POLLOUT; > > pfd[1].desc_type = APR_POLL_SOCKET; > pfd[1].desc.s = (apr_socket_t*)ap_get_module_config(r->connection->conn_config, &core_module); > pfd[1].p = r->connection->pool; > pfd[1].reqevents = APR_POLLIN; 460a465 > cib = apr_brigade_create(r->connection->pool, c->bucket_alloc); 470c475 < rv = apr_poll(&pfd, 1, &n, timeout); --- > rv = apr_poll(pfd, 2, &n, timeout); 479c484 < if (pfd.rtnevents & APR_POLLOUT) { --- > if (pfd[0].rtnevents & APR_POLLOUT) { 544c549 < pfd.reqevents = APR_POLLIN; /* Done with input data */ --- > pfd[0].reqevents = APR_POLLIN; /* Done with input data */ 562c567,579 < if (pfd.rtnevents & APR_POLLIN) { --- > if( pfd[1].rtnevents & APR_POLLIN ) { > rv = ap_get_brigade(r->connection->input_filters, cib, AP_MODE_SPECULATIVE, APR_NONBLOCK_READ, 256); > if( rv != APR_SUCCESS && rv != APR_EAGAIN ) { > ap_fcgi_fill_in_header(&header, AP_FCGI_ABORT_REQUEST, request_id, > 0, 0); > ap_fcgi_header_to_array(&header, farray); > vec[0].iov_base = (void *)farray; > vec[0].iov_len = sizeof(farray); > rv = send_data(conn, vec, 1, &len, 1); > break; > } > } > if (pfd[0].rtnevents & APR_POLLIN) { 761a779 > apr_brigade_destroy(cib);