1
0
mirror of https://github.com/apache/httpd.git synced 2025-08-08 15:02:10 +03:00

* Fix a SEGFAULT by ensuring that buckets that may have been buffered in the

network filters get flushed to the network. This is needed since
  these buckets have been created with the bucket allocator of the
  backend connection. This allocator either gets destroyed if
  conn->close is set or the worker address is not reusable which
  causes the connection to the backend to be closed or it will be used
  again by another frontend connection that wants to recycle the
  backend connection.
  In this case we could run into nasty race conditions (e.g. if the
  next user of the backend connection destroys the allocator before we
  sent the buckets to the network).

  Remark 1: Doing a setaside does not help here as the buckets remain
  created by the wrong allocator in this case.

  Remark 2: Yes, this creates a possible performance penalty in the case
  of pipelined requests as we may send only a small amount of data over
  the wire.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@604447 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Ruediger Pluem
2007-12-15 16:15:04 +00:00
parent 72109fff5c
commit d2a1cf5f8c
4 changed files with 59 additions and 2 deletions

View File

@@ -241,6 +241,10 @@ typedef struct {
int inreslist; /* connection in apr_reslist? */
#endif
apr_pool_t *scpool; /* Subpool used for socket and connection data */
request_rec *r; /* Request record of the frontend request
* which the backend currently answers. */
int need_flush;/* Flag to decide whether we need to flush the
* filter chain or not */
} proxy_conn_rec;
typedef struct {