mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
BUCKET FREELISTS
Add an allocator-passing mechanism throughout the bucket brigades API. From Apache's standpoint, the apr_bucket_alloc_t* used throughout a given connection is stored in the conn_rec by the create_connection hook. That means it's the MPM's job to optimize recycling of apr_bucket_alloc_t's -- the MPM must ensure that no two threads can ever use the same one at the same time, for instance. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@94304 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
5
CHANGES
5
CHANGES
@@ -1,5 +1,10 @@
|
||||
Changes with Apache 2.0.35
|
||||
|
||||
*) Change bucket brigades API to allow a "bucket allocator" to be
|
||||
passed in at certain points. This allows us to implement freelists
|
||||
so that we can stop using malloc/free so frequently.
|
||||
[Cliff Woolley, Brian Pane]
|
||||
|
||||
*) Add support for macro expansion within the variable names in
|
||||
<!--#echo--> and <!--#set--> directives [Brian Pane]
|
||||
|
||||
|
16
STATUS
16
STATUS
@@ -1,5 +1,5 @@
|
||||
APACHE 2.0 STATUS: -*-text-*-
|
||||
Last modified at [$Date: 2002/03/26 20:35:50 $]
|
||||
Last modified at [$Date: 2002/03/29 08:17:19 $]
|
||||
|
||||
Release:
|
||||
|
||||
@@ -49,10 +49,6 @@ CURRENT RELEASE NOTES:
|
||||
|
||||
FINAL RELEASE SHOWSTOPPERS:
|
||||
|
||||
* API changes planned for 2.0 that should happen before the
|
||||
GA release:
|
||||
* Free lists for bucket allocation
|
||||
|
||||
* We do not properly substitute the prefix-variables in the configuration
|
||||
scripts or generated-configs. (i.e. if sysconfdir is etc,
|
||||
httpd-std.conf points to conf.)
|
||||
@@ -311,14 +307,8 @@ RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
|
||||
bands, double free detection, etc. would be cool but certainly
|
||||
not a hard requirement.
|
||||
|
||||
Status: Cliff started to implement this using SMS as has
|
||||
been discussed at length for months, but since
|
||||
SMS is not being used anywhere else in the server,
|
||||
several people expressed the opinion that we should
|
||||
get rid of it entirely, meaning that the buckets
|
||||
need their own memory management (free list) functions.
|
||||
Cliff will implement that this weekend so we at least
|
||||
have something to look at/compare with.
|
||||
Status: The necessary API changes are in... apr_buckets_alloc.c
|
||||
just needs to be fleshed out.
|
||||
|
||||
* Eliminate unnecessary creation of pipes in mod_cgid
|
||||
|
||||
|
@@ -102,12 +102,13 @@
|
||||
* 20020318 (2.0.34-dev) mod_dav's API for REPORT generation changed
|
||||
* 20020319 (2.0.34-dev) M_INVALID changed, plus new M_* methods for RFC 3253
|
||||
* 20020327 (2.0.35-dev) Add parameter to quick_handler hook
|
||||
* 20020329 (2.0.35-dev) bump for addition of freelists to bucket API
|
||||
*/
|
||||
|
||||
#define MODULE_MAGIC_COOKIE 0x41503230UL /* "AP20" */
|
||||
|
||||
#ifndef MODULE_MAGIC_NUMBER_MAJOR
|
||||
#define MODULE_MAGIC_NUMBER_MAJOR 20020327
|
||||
#define MODULE_MAGIC_NUMBER_MAJOR 20020329
|
||||
#endif
|
||||
#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */
|
||||
#define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR /* backward compat */
|
||||
|
@@ -57,6 +57,7 @@
|
||||
|
||||
#include "apr_hooks.h"
|
||||
#include "apr_network_io.h"
|
||||
#include "apr_buckets.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -114,7 +115,8 @@ AP_DECLARE(void) ap_lingering_close(conn_rec *c);
|
||||
* @return An allocated connection record or NULL.
|
||||
*/
|
||||
AP_DECLARE_HOOK(conn_rec *, create_connection,
|
||||
(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh))
|
||||
(apr_pool_t *p, server_rec *server, apr_socket_t *csd,
|
||||
long conn_id, void *sbh, apr_bucket_alloc_t *alloc))
|
||||
|
||||
/**
|
||||
* This hook gives protocol modules an opportunity to set everything up
|
||||
|
@@ -666,12 +666,14 @@ AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
|
||||
* Create a bucket referring to an HTTP error.
|
||||
* @param error The HTTP error code to put in the bucket.
|
||||
* @param buf An optional error string to put in the bucket.
|
||||
* @param p A pool to allocate out of.
|
||||
* @param p A pool to allocate the error string out of.
|
||||
* @param list The bucket allocator from which to allocate the bucket
|
||||
* @return The new bucket, or NULL if allocation failed
|
||||
* @deffunc apr_bucket *ap_bucket_error_create(int error, const char *buf, apr_pool_t *p)
|
||||
* @deffunc apr_bucket *ap_bucket_error_create(int error, const char *buf, apr_pool_t *p, apr_bucket_alloc_t *list)
|
||||
*/
|
||||
AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error,
|
||||
const char *buf, apr_pool_t *p);
|
||||
AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error, const char *buf,
|
||||
apr_pool_t *p,
|
||||
apr_bucket_alloc_t *list);
|
||||
|
||||
AP_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f, apr_bucket_brigade *b);
|
||||
AP_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f, apr_bucket_brigade *b);
|
||||
|
@@ -1008,6 +1008,8 @@ struct conn_rec {
|
||||
struct ap_filter_t *output_filters;
|
||||
/** handle to scoreboard information for this connection */
|
||||
void *sbh;
|
||||
/** The bucket allocator to use for all bucket/brigade creations */
|
||||
struct apr_bucket_alloc_t *bucket_alloc;
|
||||
};
|
||||
|
||||
/* Per-vhost config... */
|
||||
|
@@ -646,16 +646,17 @@ BOOL WINAPI WriteClient (HCONN ConnID, LPVOID Buffer, LPDWORD lpdwBytes,
|
||||
DWORD dwReserved)
|
||||
{
|
||||
request_rec *r = ((isapi_cid *)ConnID)->r;
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
|
||||
if (dwReserved == HSE_IO_SYNC)
|
||||
; /* XXX: Fake it */
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_transient_create(Buffer, *lpdwBytes);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create(Buffer, *lpdwBytes, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
|
||||
@@ -739,6 +740,7 @@ BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
|
||||
{
|
||||
isapi_cid *cid = (isapi_cid *)hConn;
|
||||
request_rec *r = cid->r;
|
||||
conn_rec *c = r->connection;
|
||||
request_rec *subreq;
|
||||
|
||||
switch (dwHSERequest) {
|
||||
@@ -792,11 +794,11 @@ BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
|
||||
else if ((apr_size_t)ate < headlen) {
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
bb = apr_brigade_create(cid->r->pool);
|
||||
bb = apr_brigade_create(cid->r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create((char*) lpdwDataType + ate,
|
||||
headlen - ate);
|
||||
headlen - ate, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(cid->r->output_filters, bb);
|
||||
}
|
||||
@@ -897,7 +899,7 @@ BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
|
||||
}
|
||||
|
||||
/* apr_dupfile_oshandle (&fd, tf->hFile, r->pool); */
|
||||
bb = apr_brigade_create(r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
||||
if (tf->dwFlags & HSE_IO_SEND_HEADERS)
|
||||
{
|
||||
@@ -923,27 +925,29 @@ BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
|
||||
if ((apr_size_t)ate < tf->HeadLength)
|
||||
{
|
||||
b = apr_bucket_transient_create((char*)tf->pHead + ate,
|
||||
tf->HeadLength - ate);
|
||||
tf->HeadLength - ate,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
}
|
||||
}
|
||||
else if (tf->pHead && tf->HeadLength) {
|
||||
b = apr_bucket_transient_create((char*)tf->pHead,
|
||||
tf->HeadLength);
|
||||
tf->HeadLength,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
}
|
||||
|
||||
b = apr_bucket_file_create(fd, tf->Offset,
|
||||
tf->BytesToWrite, r->pool);
|
||||
tf->BytesToWrite, r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
if (tf->pTail && tf->TailLength) {
|
||||
b = apr_bucket_transient_create((char*)tf->pTail,
|
||||
tf->TailLength);
|
||||
tf->TailLength, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
}
|
||||
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
|
||||
@@ -1095,11 +1099,12 @@ BOOL WINAPI ServerSupportFunction(HCONN hConn, DWORD dwHSERequest,
|
||||
else if ((apr_size_t)ate < shi->cchHeader) {
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
bb = apr_brigade_create(cid->r->pool);
|
||||
bb = apr_brigade_create(cid->r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create(shi->pszHeader + ate,
|
||||
shi->cchHeader - ate);
|
||||
shi->cchHeader - ate,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(cid->r->output_filters, bb);
|
||||
}
|
||||
|
17
modules/cache/mod_file_cache.c
vendored
17
modules/cache/mod_file_cache.c
vendored
@@ -349,12 +349,14 @@ static int file_cache_xlat(request_rec *r)
|
||||
static int mmap_handler(request_rec *r, a_file *file)
|
||||
{
|
||||
#if APR_HAS_MMAP
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket *b;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
||||
b = apr_bucket_mmap_create(file->mm, 0, (apr_size_t)file->finfo.size);
|
||||
b = apr_bucket_mmap_create(file->mm, 0, (apr_size_t)file->finfo.size,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
|
||||
@@ -366,13 +368,14 @@ static int mmap_handler(request_rec *r, a_file *file)
|
||||
static int sendfile_handler(request_rec *r, a_file *file)
|
||||
{
|
||||
#if APR_HAS_SENDFILE
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket *b;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
||||
b = apr_bucket_file_create(file->file, 0,
|
||||
(apr_size_t)file->finfo.size, r->pool);
|
||||
b = apr_bucket_file_create(file->file, 0, (apr_size_t)file->finfo.size,
|
||||
r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
|
||||
|
@@ -59,6 +59,7 @@
|
||||
#include "apr.h"
|
||||
#include "apr_file_io.h"
|
||||
#include "apr_strings.h"
|
||||
#include "apr_buckets.h"
|
||||
|
||||
#if APR_HAVE_STDIO_H
|
||||
#include <stdio.h> /* for sprintf() */
|
||||
@@ -995,15 +996,15 @@ static dav_error * dav_fs_deliver(const dav_resource *resource,
|
||||
"File permissions deny server access.");
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(pool);
|
||||
bb = apr_brigade_create(pool, output->c->bucket_alloc);
|
||||
|
||||
/* ### this does not handle large files. but this is test code anyway */
|
||||
bkt = apr_bucket_file_create(fd, 0,
|
||||
(apr_size_t)resource->info->finfo.size,
|
||||
pool);
|
||||
pool, output->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, bkt);
|
||||
|
||||
bkt = apr_bucket_eos_create();
|
||||
bkt = apr_bucket_eos_create(output->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, bkt);
|
||||
|
||||
if ((status = ap_pass_brigade(output, bb)) != APR_SUCCESS) {
|
||||
|
@@ -101,7 +101,7 @@ static int process_echo_connection(conn_rec *c)
|
||||
return DECLINED;
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(c->pool);
|
||||
bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||||
|
||||
for ( ; ; ) {
|
||||
/* Get a single line of input from the client */
|
||||
@@ -113,7 +113,7 @@ static int process_echo_connection(conn_rec *c)
|
||||
}
|
||||
|
||||
/* Make sure the data is flushed to the client */
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(c->output_filters, bb);
|
||||
}
|
||||
|
@@ -202,6 +202,7 @@ static int cache_url_handler(request_rec *r, int lookup)
|
||||
/* cache file exists */
|
||||
if (cache->fresh) {
|
||||
apr_bucket_brigade *out;
|
||||
conn_rec *c = r->connection;
|
||||
|
||||
/* fresh data available */
|
||||
if (lookup) {
|
||||
@@ -227,7 +228,7 @@ static int cache_url_handler(request_rec *r, int lookup)
|
||||
ap_add_output_filter("CACHE_OUT", NULL, r, r->connection);
|
||||
|
||||
/* kick off the filter stack */
|
||||
out = apr_brigade_create(r->pool);
|
||||
out = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
if (APR_SUCCESS != (rv = ap_pass_brigade(r->output_filters, out))) {
|
||||
ap_log_error(APLOG_MARK, APLOG_ERR, rv, r->server,
|
||||
"cache: error returned while trying to return %s "
|
||||
|
@@ -40,11 +40,12 @@ static void CaseFilterInsertFilter(request_rec *r)
|
||||
static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
|
||||
apr_bucket_brigade *pbbIn)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket *pbktIn;
|
||||
apr_bucket_brigade *pbbOut;
|
||||
|
||||
/* XXX: is this the most appropriate pool? */
|
||||
pbbOut=apr_brigade_create(f->r->pool);
|
||||
pbbOut=apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_FOREACH(pbktIn,pbbIn)
|
||||
{
|
||||
const char *data;
|
||||
@@ -55,8 +56,7 @@ static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
|
||||
|
||||
if(APR_BUCKET_IS_EOS(pbktIn))
|
||||
{
|
||||
/* XXX: why can't I reuse pbktIn??? */
|
||||
apr_bucket *pbktEOS=apr_bucket_eos_create();
|
||||
apr_bucket *pbktEOS=apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(pbbOut,pbktEOS);
|
||||
continue;
|
||||
}
|
||||
@@ -65,11 +65,12 @@ static apr_status_t CaseFilterOutFilter(ap_filter_t *f,
|
||||
apr_bucket_read(pbktIn,&data,&len,APR_BLOCK_READ);
|
||||
|
||||
/* write */
|
||||
buf=malloc(len);
|
||||
buf = apr_bucket_alloc(len, c->bucket_alloc);
|
||||
for(n=0 ; n < len ; ++n)
|
||||
buf[n]=toupper(data[n]);
|
||||
|
||||
pbktOut=apr_bucket_heap_create(buf,len,0);
|
||||
pbktOut = apr_bucket_heap_create(buf, len, apr_bucket_free,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(pbbOut,pbktOut);
|
||||
}
|
||||
|
||||
|
@@ -105,12 +105,13 @@ static apr_status_t CaseFilterInFilter(ap_filter_t *f,
|
||||
apr_off_t nBytes)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
CaseFilterInContext *pCtx;
|
||||
apr_status_t ret;
|
||||
|
||||
if (!(pCtx = f->ctx)) {
|
||||
f->ctx = pCtx = apr_palloc(r->pool, sizeof *pCtx);
|
||||
pCtx->pbbTmp = apr_brigade_create(r->pool);
|
||||
pCtx->pbbTmp = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
}
|
||||
|
||||
if (APR_BRIGADE_EMPTY(pCtx->pbbTmp)) {
|
||||
@@ -149,7 +150,7 @@ static apr_status_t CaseFilterInFilter(ap_filter_t *f,
|
||||
for(n=0 ; n < len ; ++n)
|
||||
buf[n] = toupper(data[n]);
|
||||
|
||||
pbktOut = apr_bucket_heap_create(buf, len, 0);
|
||||
pbktOut = apr_bucket_heap_create(buf, len, 0, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(pbbOut, pbktOut);
|
||||
apr_bucket_delete(pbktIn);
|
||||
}
|
||||
|
@@ -347,7 +347,8 @@ static int find_code_page(request_rec *r)
|
||||
* of it.
|
||||
*/
|
||||
input_ctx = apr_pcalloc(r->pool, sizeof(charset_filter_ctx_t));
|
||||
input_ctx->bb = apr_brigade_create(r->pool);
|
||||
input_ctx->bb = apr_brigade_create(r->pool,
|
||||
r->connection->bucket_alloc);
|
||||
input_ctx->tmp = apr_palloc(r->pool, INPUT_XLATE_BUF_SIZE);
|
||||
input_ctx->dc = dc;
|
||||
reqinfo->input_ctx = input_ctx;
|
||||
@@ -443,13 +444,15 @@ static void xlate_insert_filter(request_rec *r)
|
||||
*/
|
||||
static apr_status_t send_downstream(ap_filter_t *f, const char *tmp, apr_size_t len)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
charset_filter_ctx_t *ctx = f->ctx;
|
||||
apr_status_t rv;
|
||||
|
||||
bb = apr_brigade_create(f->r->pool);
|
||||
b = apr_bucket_transient_create(tmp, len);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create(tmp, len, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
rv = ap_pass_brigade(f->next, bb);
|
||||
if (rv != APR_SUCCESS) {
|
||||
@@ -460,13 +463,15 @@ static apr_status_t send_downstream(ap_filter_t *f, const char *tmp, apr_size_t
|
||||
|
||||
static apr_status_t send_eos(ap_filter_t *f)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
charset_filter_ctx_t *ctx = f->ctx;
|
||||
apr_status_t rv;
|
||||
|
||||
bb = apr_brigade_create(f->r->pool);
|
||||
b = apr_bucket_eos_create();
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
rv = ap_pass_brigade(f->next, bb);
|
||||
if (rv != APR_SUCCESS) {
|
||||
@@ -1053,7 +1058,8 @@ static int xlate_in_filter(ap_filter_t *f, apr_bucket_brigade *bb,
|
||||
apr_bucket *e;
|
||||
|
||||
e = apr_bucket_heap_create(ctx->tmp,
|
||||
INPUT_XLATE_BUF_SIZE - buffer_size, 1);
|
||||
INPUT_XLATE_BUF_SIZE - buffer_size,
|
||||
NULL, f->r->connection->bucket_alloc);
|
||||
/* make sure we insert at the head, because there may be
|
||||
* an eos bucket already there, and the eos bucket should
|
||||
* come after the data
|
||||
|
@@ -273,8 +273,8 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
|
||||
}
|
||||
|
||||
/* We're cool with filtering this. */
|
||||
ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
|
||||
ctx->bb = apr_brigade_create(f->r->pool);
|
||||
ctx = f->ctx = apr_pcalloc(r->pool, sizeof(*ctx));
|
||||
ctx->bb = apr_brigade_create(r->pool, f->c->bucket_alloc);
|
||||
/*
|
||||
ctx->stream.zalloc = (alloc_func) 0;
|
||||
ctx->stream.zfree = (free_func) 0;
|
||||
@@ -297,7 +297,7 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
|
||||
buf = apr_psprintf(r->pool, "%c%c%c%c%c%c%c%c%c%c", deflate_magic[0],
|
||||
deflate_magic[1], Z_DEFLATED, 0 /* flags */ , 0, 0,
|
||||
0, 0 /* time */ , 0 /* xflags */ , OS_CODE);
|
||||
e = apr_bucket_pool_create(buf, 10, r->pool);
|
||||
e = apr_bucket_pool_create(buf, 10, r->pool, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb, e);
|
||||
|
||||
apr_table_setn(r->headers_out, "Content-Encoding", "gzip");
|
||||
@@ -323,7 +323,8 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
|
||||
|
||||
if (deflate_len != 0) {
|
||||
b = apr_bucket_heap_create((char *)ctx->buffer,
|
||||
deflate_len, 1);
|
||||
deflate_len, NULL,
|
||||
f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
|
||||
ctx->stream.next_out = ctx->buffer;
|
||||
ctx->stream.avail_out = FILTER_BUFSIZE;
|
||||
@@ -359,7 +360,7 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
|
||||
*p++ = len_array[2];
|
||||
*p++ = len_array[3];
|
||||
|
||||
b = apr_bucket_pool_create(buf, 8, r->pool);
|
||||
b = apr_bucket_pool_create(buf, 8, r->pool, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, 0, r,
|
||||
"Zlib: Compressed %ld to %ld : URL %s",
|
||||
@@ -421,7 +422,8 @@ static apr_status_t deflate_out_filter(ap_filter_t *f,
|
||||
ctx->stream.next_out = ctx->buffer;
|
||||
len = FILTER_BUFSIZE - ctx->stream.avail_out;
|
||||
|
||||
b = apr_bucket_heap_create((char *)ctx->buffer, len, 1);
|
||||
b = apr_bucket_heap_create((char *)ctx->buffer, len,
|
||||
NULL, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb, b);
|
||||
ctx->stream.avail_out = FILTER_BUFSIZE;
|
||||
}
|
||||
|
@@ -504,10 +504,10 @@ static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_briga
|
||||
apr_bucket *e;
|
||||
disk_cache_object_t *dobj = (disk_cache_object_t*) h->cache_obj->vobj;
|
||||
|
||||
e = apr_bucket_file_create(dobj->fd, 0, dobj->file_size, p);
|
||||
|
||||
e = apr_bucket_file_create(dobj->fd, 0, dobj->file_size, p,
|
||||
bb->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_HEAD(bb, e);
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(bb->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
return APR_SUCCESS;
|
||||
|
@@ -532,6 +532,8 @@ static apr_status_t init_filter_instance(ap_filter_t *f)
|
||||
*/
|
||||
static apr_status_t drain_available_output(ap_filter_t *f)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
ef_ctx_t *ctx = f->ctx;
|
||||
ef_dir_t *dc = ctx->dc;
|
||||
apr_size_t len;
|
||||
@@ -547,18 +549,18 @@ static apr_status_t drain_available_output(ap_filter_t *f)
|
||||
&len);
|
||||
if ((rv && !APR_STATUS_IS_EAGAIN(rv)) ||
|
||||
dc->debug >= DBGLVL_GORY) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r,
|
||||
"apr_file_read(child output), len %" APR_SIZE_T_FMT,
|
||||
!rv ? len : -1);
|
||||
}
|
||||
if (rv != APR_SUCCESS) {
|
||||
return rv;
|
||||
}
|
||||
bb = apr_brigade_create(f->r->pool);
|
||||
b = apr_bucket_transient_create(buf, len);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create(buf, len, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
|
||||
"ap_pass_brigade()");
|
||||
return rv;
|
||||
}
|
||||
@@ -632,6 +634,8 @@ static apr_status_t pass_data_to_filter(ap_filter_t *f, const char *data,
|
||||
|
||||
static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
ef_ctx_t *ctx = f->ctx;
|
||||
apr_bucket *b;
|
||||
ef_dir_t *dc;
|
||||
@@ -662,7 +666,7 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
|
||||
rv = apr_bucket_read(b, &data, &len, APR_BLOCK_READ);
|
||||
if (rv != APR_SUCCESS) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r, "apr_bucket_read()");
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r, "apr_bucket_read()");
|
||||
return rv;
|
||||
}
|
||||
|
||||
@@ -682,7 +686,7 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
* that will cause the child to finish generating output
|
||||
*/
|
||||
if ((rv = apr_file_close(ctx->proc->in)) != APR_SUCCESS) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
|
||||
"apr_file_close(child input)");
|
||||
return rv;
|
||||
}
|
||||
@@ -690,9 +694,9 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
* timeout; we don't care if we don't return from apr_file_read() for a while...
|
||||
*/
|
||||
rv = apr_file_pipe_timeout_set(ctx->proc->out,
|
||||
f->r->server->timeout * APR_USEC_PER_SEC);
|
||||
r->server->timeout * APR_USEC_PER_SEC);
|
||||
if (rv) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
|
||||
"apr_file_pipe_timeout_set(child output)");
|
||||
return rv;
|
||||
}
|
||||
@@ -705,7 +709,7 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
&len);
|
||||
if ((rv && !APR_STATUS_IS_EOF(rv) && !APR_STATUS_IS_EAGAIN(rv)) ||
|
||||
dc->debug >= DBGLVL_GORY) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_DEBUG, rv, r,
|
||||
"apr_file_read(child output), len %" APR_SIZE_T_FMT,
|
||||
!rv ? len : -1);
|
||||
}
|
||||
@@ -718,11 +722,11 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
}
|
||||
|
||||
if (rv == APR_SUCCESS) {
|
||||
bb = apr_brigade_create(f->r->pool);
|
||||
b = apr_bucket_transient_create(buf, len);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_transient_create(buf, len, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
|
||||
"ap_pass_brigade(filtered buffer) failed");
|
||||
return rv;
|
||||
}
|
||||
@@ -735,11 +739,11 @@ static apr_status_t ef_output_filter(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
|
||||
if (eos) {
|
||||
/* pass down eos */
|
||||
bb = apr_brigade_create(f->r->pool);
|
||||
b = apr_bucket_eos_create();
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
if ((rv = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) {
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, f->r,
|
||||
ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
|
||||
"ap_pass_brigade(eos) failed");
|
||||
return rv;
|
||||
}
|
||||
|
@@ -646,14 +646,14 @@ static apr_status_t read_body(cache_handle_t *h, apr_pool_t *p, apr_bucket_briga
|
||||
/* CACHE_TYPE_FILE */
|
||||
apr_file_t *file;
|
||||
apr_os_file_put(&file, &mobj->fd, APR_READ|APR_XTHREAD, p);
|
||||
b = apr_bucket_file_create(file, 0, mobj->m_len, p);
|
||||
b = apr_bucket_file_create(file, 0, mobj->m_len, p, bb->bucket_alloc);
|
||||
}
|
||||
else {
|
||||
/* CACHE_TYPE_HEAP */
|
||||
b = apr_bucket_immortal_create(mobj->m, mobj->m_len);
|
||||
b = apr_bucket_immortal_create(mobj->m, mobj->m_len, bb->bucket_alloc);
|
||||
}
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(bb->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
return APR_SUCCESS;
|
||||
|
@@ -1358,6 +1358,7 @@ static int handle_echo(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
}
|
||||
}
|
||||
if (!strcmp(tag, "var")) {
|
||||
conn_rec *c = r->connection;
|
||||
const char *val =
|
||||
get_include_var(r, ctx,
|
||||
ap_ssi_parse_string(r, ctx, tag_val, NULL,
|
||||
@@ -1377,7 +1378,7 @@ static int handle_echo(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
|
||||
e_len = strlen(echo_text);
|
||||
tmp_buck = apr_bucket_pool_create(echo_text, e_len,
|
||||
r->pool);
|
||||
r->pool, c->bucket_alloc);
|
||||
}
|
||||
else {
|
||||
include_server_config *sconf=
|
||||
@@ -1385,7 +1386,7 @@ static int handle_echo(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
&include_module);
|
||||
tmp_buck = apr_bucket_pool_create(sconf->undefinedEcho,
|
||||
sconf->undefinedEchoLen,
|
||||
r->pool);
|
||||
r->pool, c->bucket_alloc);
|
||||
}
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
if (*inserted_head == NULL) {
|
||||
@@ -1623,7 +1624,8 @@ static int handle_fsize(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
s_len = pos;
|
||||
}
|
||||
|
||||
tmp_buck = apr_bucket_heap_create(buff, s_len, 1);
|
||||
tmp_buck = apr_bucket_heap_create(buff, s_len, NULL,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
if (*inserted_head == NULL) {
|
||||
*inserted_head = tmp_buck;
|
||||
@@ -1671,7 +1673,8 @@ static int handle_flastmod(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
t_val = ap_ht_time(r->pool, finfo.mtime, ctx->time_str, 0);
|
||||
t_len = strlen(t_val);
|
||||
|
||||
tmp_buck = apr_bucket_pool_create(t_val, t_len, r->pool);
|
||||
tmp_buck = apr_bucket_pool_create(t_val, t_len, r->pool,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
if (*inserted_head == NULL) {
|
||||
*inserted_head = tmp_buck;
|
||||
@@ -2504,8 +2507,9 @@ static int parse_expr(request_rec *r, include_ctx_t *ctx, const char *expr,
|
||||
if (cntx->flags & FLAG_COND_TRUE) { \
|
||||
cond_txt[31] = '1'; \
|
||||
} \
|
||||
memcpy(&cond_txt[5], tag_text, sizeof(tag_text)); \
|
||||
t_buck = apr_bucket_heap_create(cond_txt, sizeof(cond_txt), 1); \
|
||||
memcpy(&cond_txt[5], tag_text, sizeof(tag_text)-1); \
|
||||
t_buck = apr_bucket_heap_create(cond_txt, sizeof(cond_txt)-1, \
|
||||
NULL, h_ptr->list); \
|
||||
APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck); \
|
||||
\
|
||||
if (ins_head == NULL) { \
|
||||
@@ -2515,7 +2519,8 @@ static int parse_expr(request_rec *r, include_ctx_t *ctx, const char *expr,
|
||||
#define DUMP_PARSE_EXPR_DEBUG(t_buck, h_ptr, d_buf, ins_head) \
|
||||
{ \
|
||||
if (d_buf[0] != '\0') { \
|
||||
t_buck = apr_bucket_heap_create(d_buf, strlen(d_buf), 1); \
|
||||
t_buck = apr_bucket_heap_create(d_buf, strlen(d_buf), \
|
||||
NULL, h_ptr->list); \
|
||||
APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck); \
|
||||
\
|
||||
if (ins_head == NULL) { \
|
||||
@@ -2591,7 +2596,8 @@ static int handle_if(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
if (1) {
|
||||
apr_size_t d_len = 0;
|
||||
d_len = sprintf(debug_buf, "**** if expr=\"%s\"\n", expr);
|
||||
tmp_buck = apr_bucket_heap_create(debug_buf, d_len, 1);
|
||||
tmp_buck = apr_bucket_heap_create(debug_buf, d_len, NULL,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
|
||||
if (*inserted_head == NULL) {
|
||||
@@ -2673,7 +2679,8 @@ static int handle_elif(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
if (1) {
|
||||
apr_size_t d_len = 0;
|
||||
d_len = sprintf(debug_buf, "**** elif expr=\"%s\"\n", expr);
|
||||
tmp_buck = apr_bucket_heap_create(debug_buf, d_len, 1);
|
||||
tmp_buck = apr_bucket_heap_create(debug_buf, d_len, NULL,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
|
||||
if (*inserted_head == NULL) {
|
||||
@@ -2854,7 +2861,8 @@ static int handle_printenv(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
*next++ = '\n';
|
||||
*next = 0;
|
||||
tmp_buck = apr_bucket_pool_create(key_val, kv_length - 1,
|
||||
r->pool);
|
||||
r->pool,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
if (*inserted_head == NULL) {
|
||||
*inserted_head = tmp_buck;
|
||||
@@ -2912,7 +2920,8 @@ static apr_status_t send_parsed_content(apr_bucket_brigade **bb,
|
||||
apr_bucket *tmp_bkt;
|
||||
|
||||
tmp_bkt = apr_bucket_immortal_create(ctx->start_seq,
|
||||
cleanup_bytes);
|
||||
cleanup_bytes,
|
||||
r->connection->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_HEAD(*bb, tmp_bkt);
|
||||
apr_brigade_cleanup(ctx->ssi_tag_brigade);
|
||||
}
|
||||
@@ -2946,7 +2955,7 @@ static apr_status_t send_parsed_content(apr_bucket_brigade **bb,
|
||||
/* Send the large chunk of pre-tag bytes... */
|
||||
tag_and_after = apr_brigade_split(*bb, tmp_dptr);
|
||||
if (ctx->output_flush) {
|
||||
APR_BRIGADE_INSERT_TAIL(*bb, apr_bucket_flush_create());
|
||||
APR_BRIGADE_INSERT_TAIL(*bb, apr_bucket_flush_create((*bb)->bucket_alloc));
|
||||
}
|
||||
|
||||
rv = ap_pass_brigade(f->next, *bb);
|
||||
@@ -3281,7 +3290,8 @@ static apr_status_t includes_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
if (ap_allow_options(r) & OPT_INCNOEXEC) {
|
||||
ctx->flags |= FLAG_NO_EXEC;
|
||||
}
|
||||
ctx->ssi_tag_brigade = apr_brigade_create(f->c->pool);
|
||||
ctx->ssi_tag_brigade = apr_brigade_create(f->c->pool,
|
||||
f->c->bucket_alloc);
|
||||
ctx->status = APR_SUCCESS;
|
||||
|
||||
ctx->error_str = conf->default_error_msg;
|
||||
|
@@ -189,7 +189,8 @@ typedef struct include_filter_ctx {
|
||||
{ \
|
||||
/* XXX: it'd probably be nice to use a pool bucket here */ \
|
||||
t_buck = apr_bucket_heap_create(cntx->error_str, \
|
||||
strlen(cntx->error_str), 1); \
|
||||
strlen(cntx->error_str), \
|
||||
NULL, h_ptr->list); \
|
||||
APR_BUCKET_INSERT_BEFORE(h_ptr, t_buck); \
|
||||
\
|
||||
if (ins_head == NULL) { \
|
||||
@@ -208,7 +209,7 @@ if ((APR_BRIGADE_EMPTY((cntxt)->ssi_tag_brigade)) && \
|
||||
\
|
||||
tag_plus = apr_brigade_split((brgd), (cntxt)->head_start_bucket); \
|
||||
if ((cntxt)->output_flush) { \
|
||||
APR_BRIGADE_INSERT_TAIL((brgd), apr_bucket_flush_create()); \
|
||||
APR_BRIGADE_INSERT_TAIL((brgd), apr_bucket_flush_create((brgd)->bucket_alloc)); \
|
||||
} \
|
||||
(rc) = ap_pass_brigade((next), (brgd)); \
|
||||
(cntxt)->bytes_parsed = 0; \
|
||||
|
@@ -72,6 +72,7 @@
|
||||
|
||||
static int asis_handler(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_file_t *f = NULL;
|
||||
apr_status_t rv;
|
||||
const char *location;
|
||||
@@ -130,7 +131,7 @@ static int asis_handler(request_rec *r)
|
||||
return HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
#if APR_HAS_LARGE_FILES
|
||||
if (r->finfo.size - pos > AP_MAX_SENDFILE) {
|
||||
/* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
|
||||
@@ -138,7 +139,8 @@ static int asis_handler(request_rec *r)
|
||||
* in case the brigade code/filters attempt to read it directly.
|
||||
*/
|
||||
apr_off_t fsize = r->finfo.size - pos;
|
||||
b = apr_bucket_file_create(f, pos, AP_MAX_SENDFILE, r->pool);
|
||||
b = apr_bucket_file_create(f, pos, AP_MAX_SENDFILE,
|
||||
r->pool, c->bucket_alloc);
|
||||
while (fsize > AP_MAX_SENDFILE) {
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
apr_bucket_copy(b, &b);
|
||||
@@ -149,9 +151,10 @@ static int asis_handler(request_rec *r)
|
||||
}
|
||||
else
|
||||
#endif
|
||||
b = apr_bucket_file_create(f, pos, (apr_size_t) (r->finfo.size - pos), r->pool);
|
||||
b = apr_bucket_file_create(f, pos, (apr_size_t) (r->finfo.size - pos),
|
||||
r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
rv = ap_pass_brigade(r->output_filters, bb);
|
||||
if (rv != APR_SUCCESS) {
|
||||
|
@@ -702,14 +702,15 @@ static int cgi_handler(request_rec *r)
|
||||
|
||||
/* Handle script return... */
|
||||
if (script_in && !nph) {
|
||||
conn_rec *c = r->connection;
|
||||
const char *location;
|
||||
char sbuf[MAX_STRING_LEN];
|
||||
int ret;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(script_in);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(script_in, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
if ((ret = ap_scan_script_header_err_brigade(r, bb, sbuf))) {
|
||||
@@ -755,6 +756,7 @@ static int cgi_handler(request_rec *r)
|
||||
}
|
||||
|
||||
if (script_in && nph) {
|
||||
conn_rec *c = r->connection;
|
||||
struct ap_filter_t *cur;
|
||||
|
||||
/* get rid of all filters up through protocol... since we
|
||||
@@ -768,10 +770,10 @@ static int cgi_handler(request_rec *r)
|
||||
}
|
||||
r->output_filters = r->proto_output_filters = cur;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(script_in);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(script_in, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
}
|
||||
@@ -825,6 +827,7 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
|
||||
if (ap_is_HTTP_REDIRECT(rr_status)) {
|
||||
apr_size_t len_loc;
|
||||
const char *location = apr_table_get(rr->headers_out, "Location");
|
||||
conn_rec *c = r->connection;
|
||||
|
||||
location = ap_escape_html(rr->pool, location);
|
||||
len_loc = strlen(location);
|
||||
@@ -834,15 +837,20 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
|
||||
* and a single pool bucket */
|
||||
|
||||
tmp_buck = apr_bucket_immortal_create("<A HREF=\"",
|
||||
sizeof("<A HREF=\"") - 1);
|
||||
sizeof("<A HREF=\"") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, NULL,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1);
|
||||
tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, NULL,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1);
|
||||
tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
|
||||
if (*inserted_head == NULL) {
|
||||
@@ -890,8 +898,8 @@ static int include_cmd(include_ctx_t *ctx, apr_bucket_brigade **bb,
|
||||
return HTTP_INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
bcgi = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(script_in);
|
||||
bcgi = apr_brigade_create(r->pool, f->c->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(script_in, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bcgi, b);
|
||||
ap_pass_brigade(f->next, bcgi);
|
||||
|
||||
|
@@ -975,6 +975,7 @@ static int connect_to_daemon(int *sdptr, request_rec *r,
|
||||
*/
|
||||
static int cgid_handler(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
int retval, nph, dbpos = 0;
|
||||
char *argv0, *dbuf = NULL;
|
||||
apr_bucket_brigade *bb;
|
||||
@@ -1156,10 +1157,10 @@ static int cgid_handler(request_rec *r)
|
||||
*/
|
||||
apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(tempsock);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(tempsock, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
}
|
||||
@@ -1185,10 +1186,10 @@ static int cgid_handler(request_rec *r)
|
||||
}
|
||||
r->output_filters = r->proto_output_filters = cur;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(tempsock);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(tempsock, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
b = apr_bucket_eos_create();
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
}
|
||||
@@ -1244,6 +1245,7 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
|
||||
if (ap_is_HTTP_REDIRECT(rr_status)) {
|
||||
apr_size_t len_loc;
|
||||
const char *location = apr_table_get(rr->headers_out, "Location");
|
||||
conn_rec *c = r->connection;
|
||||
|
||||
location = ap_escape_html(rr->pool, location);
|
||||
len_loc = strlen(location);
|
||||
@@ -1253,15 +1255,20 @@ static int include_cgi(char *s, request_rec *r, ap_filter_t *next,
|
||||
* and a single pool bucket */
|
||||
|
||||
tmp_buck = apr_bucket_immortal_create("<A HREF=\"",
|
||||
sizeof("<A HREF=\"") - 1);
|
||||
sizeof("<A HREF=\"") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp_buck);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, NULL,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1);
|
||||
tmp2_buck = apr_bucket_immortal_create("\">", sizeof("\">") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, 1);
|
||||
tmp2_buck = apr_bucket_heap_create(location, len_loc, NULL,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1);
|
||||
tmp2_buck = apr_bucket_immortal_create("</A>", sizeof("</A>") - 1,
|
||||
c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(head_ptr, tmp2_buck);
|
||||
|
||||
if (*inserted_head == NULL) {
|
||||
@@ -1381,8 +1388,8 @@ static int include_cmd(include_ctx_t *ctx, apr_bucket_brigade **bb, char *comman
|
||||
*/
|
||||
apr_pool_cleanup_kill(r->pool, (void *)sd, close_unix_socket);
|
||||
|
||||
bcgi = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_pipe_create(tempsock);
|
||||
bcgi = apr_brigade_create(r->pool, r->connection->bucket_alloc);
|
||||
b = apr_bucket_pipe_create(tempsock, r->connection->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bcgi, b);
|
||||
ap_pass_brigade(f->next, bcgi);
|
||||
}
|
||||
|
@@ -144,6 +144,7 @@ static apr_status_t chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
{
|
||||
#define ASCII_CRLF "\015\012"
|
||||
#define ASCII_ZERO "\060"
|
||||
conn_rec *c = f->r->connection;
|
||||
apr_bucket_brigade *more;
|
||||
apr_bucket *e;
|
||||
apr_status_t rv;
|
||||
@@ -214,14 +215,15 @@ static apr_status_t chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
hdr_len = apr_snprintf(chunk_hdr, sizeof(chunk_hdr),
|
||||
"%qx" CRLF, (apr_uint64_t)bytes);
|
||||
ap_xlate_proto_to_ascii(chunk_hdr, hdr_len);
|
||||
e = apr_bucket_transient_create(chunk_hdr, hdr_len);
|
||||
e = apr_bucket_transient_create(chunk_hdr, hdr_len,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_HEAD(b, e);
|
||||
|
||||
/*
|
||||
* Insert the end-of-chunk CRLF before an EOS or
|
||||
* FLUSH bucket, or appended to the brigade
|
||||
*/
|
||||
e = apr_bucket_immortal_create(ASCII_CRLF, 2);
|
||||
e = apr_bucket_immortal_create(ASCII_CRLF, 2, c->bucket_alloc);
|
||||
if (eos != NULL) {
|
||||
APR_BUCKET_INSERT_BEFORE(eos, e);
|
||||
}
|
||||
@@ -248,7 +250,9 @@ static apr_status_t chunk_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
*/
|
||||
if (eos != NULL) {
|
||||
/* XXX: (2) trailers ... does not yet exist */
|
||||
e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF /* <trailers> */ ASCII_CRLF, 5);
|
||||
e = apr_bucket_immortal_create(ASCII_ZERO ASCII_CRLF
|
||||
/* <trailers> */
|
||||
ASCII_CRLF, 5, c->bucket_alloc);
|
||||
APR_BUCKET_INSERT_BEFORE(eos, e);
|
||||
}
|
||||
|
||||
|
@@ -739,11 +739,12 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
||||
}
|
||||
|
||||
if (!ctx->remaining) {
|
||||
conn_rec *c = f->r->connection;
|
||||
switch (ctx->state) {
|
||||
case BODY_NONE:
|
||||
break;
|
||||
case BODY_LENGTH:
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(b, e);
|
||||
return APR_SUCCESS;
|
||||
case BODY_CHUNK:
|
||||
@@ -766,7 +767,7 @@ apr_status_t ap_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
||||
|
||||
if (!ctx->remaining) {
|
||||
/* Handle trailers by calling get_mime_headers again! */
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(b, e);
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
@@ -1164,7 +1165,7 @@ AP_DECLARE_NONSTD(int) ap_send_http_trace(request_rec *r)
|
||||
|
||||
/* Now we recreate the request, and echo it back */
|
||||
|
||||
b = apr_brigade_create(r->pool);
|
||||
b = apr_brigade_create(r->pool, r->connection->bucket_alloc);
|
||||
apr_brigade_putstrs(b, NULL, NULL, r->the_request, CRLF, NULL);
|
||||
h.pool = r->pool;
|
||||
h.bb = b;
|
||||
@@ -1290,6 +1291,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
|
||||
{
|
||||
int i;
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
const char *clheader;
|
||||
const char *protocol;
|
||||
apr_bucket *e;
|
||||
@@ -1416,7 +1418,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter(ap_filter_t *f,
|
||||
apr_table_unset(r->headers_out, "Content-Length");
|
||||
}
|
||||
|
||||
b2 = apr_brigade_create(r->pool);
|
||||
b2 = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
basic_http_header(r, b2, protocol);
|
||||
|
||||
h.pool = r->pool;
|
||||
@@ -1575,6 +1577,7 @@ AP_DECLARE(int) ap_should_client_block(request_rec *r)
|
||||
}
|
||||
|
||||
if (r->expecting_100 && r->proto_num >= HTTP_VERSION(1,1)) {
|
||||
conn_rec *c = r->connection;
|
||||
char *tmp;
|
||||
apr_bucket *e;
|
||||
apr_bucket_brigade *bb;
|
||||
@@ -1582,10 +1585,10 @@ AP_DECLARE(int) ap_should_client_block(request_rec *r)
|
||||
/* sending 100 Continue interim response */
|
||||
tmp = apr_pstrcat(r->pool, AP_SERVER_PROTOCOL, " ", status_lines[0],
|
||||
CRLF CRLF, NULL);
|
||||
bb = apr_brigade_create(r->pool);
|
||||
e = apr_bucket_pool_create(tmp, strlen(tmp), r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
e = apr_bucket_pool_create(tmp, strlen(tmp), r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_HEAD(bb, e);
|
||||
e = apr_bucket_flush_create();
|
||||
e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
ap_pass_brigade(r->connection->output_filters, bb);
|
||||
@@ -2585,6 +2588,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
{
|
||||
#define MIN_LENGTH(len1, len2) ((len1 > len2) ? len2 : len1)
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
byterange_ctx *ctx = f->ctx;
|
||||
apr_bucket *e;
|
||||
apr_bucket_brigade *bsend;
|
||||
@@ -2602,11 +2606,11 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
|
||||
if (num_ranges == -1) {
|
||||
ap_remove_output_filter(f);
|
||||
bsend = apr_brigade_create(r->pool);
|
||||
bsend = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
e = ap_bucket_error_create(HTTP_RANGE_NOT_SATISFIABLE, NULL,
|
||||
r->pool);
|
||||
r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
return ap_pass_brigade(f->next, bsend);
|
||||
}
|
||||
@@ -2627,7 +2631,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
}
|
||||
|
||||
/* create a brigade in case we never call ap_save_brigade() */
|
||||
ctx->bb = apr_brigade_create(r->pool);
|
||||
ctx->bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
}
|
||||
|
||||
/* We can't actually deal with byte-ranges until we have the whole brigade
|
||||
@@ -2664,7 +2668,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
clength = (apr_off_t)bb_length;
|
||||
|
||||
/* this brigade holds what we will be sending */
|
||||
bsend = apr_brigade_create(r->pool);
|
||||
bsend = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
||||
while ((current = ap_getword(r->pool, &r->range, ','))
|
||||
&& (rv = parse_byterange(current, clength, &range_start,
|
||||
@@ -2695,14 +2699,15 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
if (ctx->num_ranges > 1) {
|
||||
char *ts;
|
||||
|
||||
e = apr_bucket_pool_create(bound_head,
|
||||
strlen(bound_head), r->pool);
|
||||
e = apr_bucket_pool_create(bound_head, strlen(bound_head),
|
||||
r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
|
||||
ts = apr_psprintf(r->pool, BYTERANGE_FMT CRLF CRLF,
|
||||
range_start, range_end, clength);
|
||||
ap_xlate_proto_to_ascii(ts, strlen(ts));
|
||||
e = apr_bucket_pool_create(ts, strlen(ts), r->pool);
|
||||
e = apr_bucket_pool_create(ts, strlen(ts), r->pool,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
}
|
||||
|
||||
@@ -2739,11 +2744,11 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_byterange_filter(ap_filter_t *f,
|
||||
/* add the final boundary */
|
||||
end = apr_pstrcat(r->pool, CRLF "--", r->boundary, "--" CRLF, NULL);
|
||||
ap_xlate_proto_to_ascii(end, strlen(end));
|
||||
e = apr_bucket_pool_create(end, strlen(end), r->pool);
|
||||
e = apr_bucket_pool_create(end, strlen(end), r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
}
|
||||
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bsend, e);
|
||||
|
||||
/* we're done with the original content */
|
||||
|
@@ -207,10 +207,11 @@ AP_DECLARE(void) ap_die(int type, request_rec *r)
|
||||
|
||||
static void check_pipeline_flush(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
/* ### if would be nice if we could PEEK without a brigade. that would
|
||||
### allow us to defer creation of the brigade to when we actually
|
||||
### need to send a FLUSH. */
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
|
||||
/* Flush the filter contents if:
|
||||
*
|
||||
@@ -222,7 +223,7 @@ static void check_pipeline_flush(request_rec *r)
|
||||
if (!r->connection->keepalive ||
|
||||
ap_get_brigade(r->input_filters, bb, AP_MODE_EATCRLF,
|
||||
APR_NONBLOCK_READ, 0) != APR_SUCCESS) {
|
||||
apr_bucket *e = apr_bucket_flush_create();
|
||||
apr_bucket *e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
|
||||
/* We just send directly to the connection based filters. At
|
||||
* this point, we know that we have seen all of the data
|
||||
|
@@ -2813,6 +2813,7 @@ static int handle_map_file(request_rec *r)
|
||||
|
||||
if (best->body)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *e;
|
||||
|
||||
@@ -2840,11 +2841,12 @@ static int handle_map_file(request_rec *r)
|
||||
return res;
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
e = apr_bucket_file_create(map, best->body,
|
||||
(apr_size_t)best->bytes, r->pool);
|
||||
(apr_size_t)best->bytes, r->pool,
|
||||
c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
return ap_pass_brigade(r->output_filters, bb);
|
||||
|
@@ -315,8 +315,9 @@ typedef struct {
|
||||
apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
{
|
||||
request_rec *r = f->r;
|
||||
conn_rec *c = r->connection;
|
||||
apr_pool_t *p = r->pool;
|
||||
apr_bucket_brigade *out = apr_brigade_create(p);
|
||||
apr_bucket_brigade *out = apr_brigade_create(p, c->bucket_alloc);
|
||||
apr_status_t rv;
|
||||
|
||||
register int n;
|
||||
@@ -329,7 +330,7 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
|
||||
if (!ctx) {
|
||||
f->ctx = ctx = apr_pcalloc(p, sizeof(*ctx));
|
||||
ctx->in = apr_brigade_create(p);
|
||||
ctx->in = apr_brigade_create(p, c->bucket_alloc);
|
||||
ctx->buffer[0] = 0;
|
||||
ctx->state = HEADER;
|
||||
}
|
||||
@@ -387,7 +388,8 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
site, basedir, ap_escape_uri(p, path),
|
||||
site, str);
|
||||
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str),
|
||||
p, c->bucket_alloc));
|
||||
|
||||
for (dir = path+1; (dir = strchr(dir, '/')) != NULL; )
|
||||
{
|
||||
@@ -404,10 +406,14 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
*dir = '/';
|
||||
while (*dir == '/')
|
||||
++dir;
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str,
|
||||
strlen(str), p,
|
||||
c->bucket_alloc));
|
||||
}
|
||||
if (wildcard != NULL) {
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(wildcard, strlen(wildcard), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(wildcard,
|
||||
strlen(wildcard), p,
|
||||
c->bucket_alloc));
|
||||
}
|
||||
|
||||
/* If the caller has determined the current directory, and it differs */
|
||||
@@ -419,18 +425,21 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
str = apr_psprintf(p, "</h2>\n\n(%s)\n\n <hr />\n\n<pre>",
|
||||
ap_escape_html(p, pwd));
|
||||
}
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str),
|
||||
p, c->bucket_alloc));
|
||||
|
||||
/* print README */
|
||||
if (readme) {
|
||||
str = apr_psprintf(p, "%s\n</pre>\n\n<hr />\n\n<pre>\n",
|
||||
ap_escape_html(p, readme));
|
||||
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str,
|
||||
strlen(str), p,
|
||||
c->bucket_alloc));
|
||||
}
|
||||
|
||||
/* make sure page intro gets sent out */
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create(c->bucket_alloc));
|
||||
if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
|
||||
return rv;
|
||||
}
|
||||
@@ -581,8 +590,9 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
/* erase buffer for next time around */
|
||||
ctx->buffer[0] = 0;
|
||||
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p,
|
||||
c->bucket_alloc));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create(c->bucket_alloc));
|
||||
if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
|
||||
return rv;
|
||||
}
|
||||
@@ -592,9 +602,10 @@ apr_status_t ap_proxy_send_dir_filter(ap_filter_t *f, apr_bucket_brigade *in)
|
||||
|
||||
if (FOOTER == ctx->state) {
|
||||
str = apr_psprintf(p, "</pre>\n\n <hr />\n\n %s\n\n </body>\n</html>\n", ap_psignature("", r));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create());
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_eos_create());
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_pool_create(str, strlen(str), p,
|
||||
c->bucket_alloc));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_flush_create(c->bucket_alloc));
|
||||
APR_BRIGADE_INSERT_TAIL(out, apr_bucket_eos_create(c->bucket_alloc));
|
||||
if (APR_SUCCESS != (rv = ap_pass_brigade(f->next, out))) {
|
||||
return rv;
|
||||
}
|
||||
@@ -619,9 +630,9 @@ proxy_ftp_command(const char *cmd, request_rec *r, conn_rec *ftp_ctrl,
|
||||
|
||||
/* If cmd == NULL, we retrieve the next ftp response line */
|
||||
if (cmd != NULL) {
|
||||
|
||||
APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(cmd, strlen(cmd), r->pool));
|
||||
APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_flush_create());
|
||||
conn_rec *c = r->connection;
|
||||
APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_pool_create(cmd, strlen(cmd), r->pool, c->bucket_alloc));
|
||||
APR_BRIGADE_INSERT_TAIL(bb, apr_bucket_flush_create(c->bucket_alloc));
|
||||
ap_pass_brigade(ftp_ctrl->output_filters, bb);
|
||||
|
||||
/* strip off the CRLF for logging */
|
||||
@@ -768,7 +779,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
|
||||
apr_status_t rv;
|
||||
conn_rec *origin, *data = NULL;
|
||||
int err;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(p);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
|
||||
char *buf, *connectname;
|
||||
apr_port_t connectport;
|
||||
char buffer[MAX_STRING_LEN];
|
||||
@@ -1013,7 +1024,8 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
|
||||
}
|
||||
|
||||
/* the socket is now open, create a new connection */
|
||||
origin = ap_run_create_connection(p, r->server, sock, r->connection->id, r->connection->sbh);
|
||||
origin = ap_run_create_connection(p, r->server, sock, r->connection->id,
|
||||
r->connection->sbh, c->bucket_alloc);
|
||||
if (!origin) {
|
||||
/*
|
||||
* the peer reset the connection already; ap_run_create_connection() closed
|
||||
@@ -1084,7 +1096,6 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
|
||||
return ap_proxyerror(r, HTTP_BAD_GATEWAY, ftpmessage);
|
||||
}
|
||||
|
||||
|
||||
rc = proxy_ftp_command(apr_pstrcat(p, "USER ", user, CRLF, NULL),
|
||||
r, origin, bb, &ftpmessage);
|
||||
/* possible results; 230, 331, 332, 421, 500, 501, 530 */
|
||||
@@ -1774,7 +1785,8 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
|
||||
}
|
||||
|
||||
/* the transfer socket is now open, create a new connection */
|
||||
data = ap_run_create_connection(p, r->server, data_sock, r->connection->id, r->connection->sbh);
|
||||
data = ap_run_create_connection(p, r->server, data_sock, r->connection->id,
|
||||
r->connection->sbh, c->bucket_alloc);
|
||||
if (!data) {
|
||||
/*
|
||||
* the peer reset the connection already; ap_run_create_connection() closed
|
||||
@@ -1849,7 +1861,7 @@ int ap_proxy_ftp_handler(request_rec *r, proxy_server_conf *conf,
|
||||
|
||||
/* if no EOS yet, then we must flush */
|
||||
if (FALSE == finish) {
|
||||
e = apr_bucket_flush_create();
|
||||
e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
}
|
||||
|
||||
|
@@ -375,7 +375,8 @@ apr_status_t ap_proxy_http_create_connection(apr_pool_t *p, request_rec *r,
|
||||
|
||||
/* the socket is now open, create a new backend server connection */
|
||||
*origin = ap_run_create_connection(c->pool, r->server, p_conn->sock,
|
||||
r->connection->id, r->connection->sbh);
|
||||
r->connection->id,
|
||||
r->connection->sbh, c->bucket_alloc);
|
||||
if (!origin) {
|
||||
/* the peer reset the connection already; ap_run_create_connection()
|
||||
* closed the socket
|
||||
@@ -412,6 +413,7 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|
||||
apr_uri_t *uri,
|
||||
char *url, apr_bucket_brigade *bb,
|
||||
char *server_portstr) {
|
||||
conn_rec *c = r->connection;
|
||||
char buffer[HUGE_STRING_LEN];
|
||||
char *buf;
|
||||
apr_bucket *e;
|
||||
@@ -442,7 +444,7 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|
||||
}
|
||||
|
||||
buf = apr_pstrcat(p, r->method, " ", url, " HTTP/1.1" CRLF, NULL);
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p);
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
if ( conf->preserve_host == 0 ) {
|
||||
if (uri->port_str && uri->port != DEFAULT_HTTP_PORT) {
|
||||
@@ -468,7 +470,7 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|
||||
}
|
||||
buf = apr_pstrcat(p, "Host: ", hostname, CRLF, NULL);
|
||||
}
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p);
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
/* handle Via */
|
||||
@@ -583,14 +585,14 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|
||||
buf = apr_pstrcat(p, headers_in[counter].key, ": ",
|
||||
headers_in[counter].val, CRLF,
|
||||
NULL);
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p);
|
||||
e = apr_bucket_pool_create(buf, strlen(buf), p, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
}
|
||||
|
||||
/* add empty line at the end of the headers */
|
||||
e = apr_bucket_immortal_create(CRLF, sizeof(CRLF)-1);
|
||||
e = apr_bucket_immortal_create(CRLF, sizeof(CRLF)-1, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
e = apr_bucket_flush_create();
|
||||
e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
ap_pass_brigade(origin->output_filters, bb);
|
||||
@@ -598,9 +600,9 @@ apr_status_t ap_proxy_http_request(apr_pool_t *p, request_rec *r,
|
||||
/* send the request data, if any. */
|
||||
if (ap_should_client_block(r)) {
|
||||
while ((counter = ap_get_client_block(r, buffer, sizeof(buffer))) > 0) {
|
||||
e = apr_bucket_pool_create(buffer, counter, p);
|
||||
e = apr_bucket_pool_create(buffer, counter, p, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
e = apr_bucket_flush_create();
|
||||
e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
ap_pass_brigade(origin->output_filters, bb);
|
||||
apr_brigade_cleanup(bb);
|
||||
@@ -617,6 +619,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
|
||||
proxy_server_conf *conf,
|
||||
apr_bucket_brigade *bb,
|
||||
char *server_portstr) {
|
||||
conn_rec *c = r->connection;
|
||||
char buffer[HUGE_STRING_LEN];
|
||||
request_rec *rp;
|
||||
apr_bucket *e;
|
||||
@@ -789,7 +792,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
|
||||
/* Is it an HTTP/0.9 response? If so, send the extra data */
|
||||
if (backasswards) {
|
||||
apr_ssize_t cntr = len;
|
||||
e = apr_bucket_heap_create(buffer, cntr, 1);
|
||||
e = apr_bucket_heap_create(buffer, cntr, NULL, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
}
|
||||
|
||||
@@ -859,7 +862,7 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
|
||||
|
||||
/* if no EOS yet, then we must flush */
|
||||
if (FALSE == finish) {
|
||||
e = apr_bucket_flush_create();
|
||||
e = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
}
|
||||
|
||||
@@ -958,7 +961,7 @@ int ap_proxy_http_handler(request_rec *r, proxy_server_conf *conf,
|
||||
*/
|
||||
apr_pool_t *p = r->connection->pool;
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(p);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(p, c->bucket_alloc);
|
||||
apr_uri_t *uri = apr_palloc(r->connection->pool, sizeof(*uri));
|
||||
proxy_http_conn_t *p_conn = apr_pcalloc(r->connection->pool,
|
||||
sizeof(*p_conn));
|
||||
|
@@ -99,7 +99,7 @@ static BIO_bucket_t *BIO_bucket_new(SSLFilterRec *frec, conn_rec *c)
|
||||
|
||||
b->frec = frec;
|
||||
b->c = c;
|
||||
b->bb = apr_brigade_create(c->pool);
|
||||
b->bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||||
b->blen = 0;
|
||||
b->length = 0;
|
||||
|
||||
@@ -111,24 +111,25 @@ static BIO_bucket_t *BIO_bucket_new(SSLFilterRec *frec, conn_rec *c)
|
||||
static int BIO_bucket_flush(BIO *bio)
|
||||
{
|
||||
BIO_bucket_t *b = BIO_bucket_ptr(bio);
|
||||
apr_bucket *e;
|
||||
|
||||
if (!(b->blen || b->length)) {
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
|
||||
if (b->blen) {
|
||||
apr_bucket *bucket =
|
||||
apr_bucket_transient_create(b->buffer,
|
||||
b->blen);
|
||||
e = apr_bucket_transient_create(b->buffer, b->blen,
|
||||
b->bb->bucket_alloc);
|
||||
/* we filled this buffer first so add it to the
|
||||
* head of the brigade
|
||||
*/
|
||||
APR_BRIGADE_INSERT_HEAD(b->bb, bucket);
|
||||
APR_BRIGADE_INSERT_HEAD(b->bb, e);
|
||||
b->blen = 0;
|
||||
}
|
||||
|
||||
b->length = 0;
|
||||
APR_BRIGADE_INSERT_TAIL(b->bb, apr_bucket_flush_create());
|
||||
e = apr_bucket_flush_create(b->bb->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(b->bb, e);
|
||||
|
||||
return ap_pass_brigade(b->frec->pOutputFilter->next, b->bb);
|
||||
}
|
||||
@@ -187,7 +188,8 @@ static int bio_bucket_write(BIO *bio, const char *in, int inl)
|
||||
* need to flush since we're using SSL's malloc-ed buffer
|
||||
* which will be overwritten once we leave here
|
||||
*/
|
||||
apr_bucket *bucket = apr_bucket_transient_create(in, inl);
|
||||
apr_bucket *bucket = apr_bucket_transient_create(in, inl,
|
||||
b->bb->bucket_alloc);
|
||||
|
||||
b->length += inl;
|
||||
APR_BRIGADE_INSERT_TAIL(b->bb, bucket);
|
||||
@@ -732,9 +734,10 @@ static apr_status_t ssl_io_input_getline(ssl_io_input_ctx_t *ctx,
|
||||
#define HTTP_ON_HTTPS_PORT \
|
||||
"GET /mod_ssl:error:HTTP-request HTTP/1.0\r\n\r\n"
|
||||
|
||||
#define HTTP_ON_HTTPS_PORT_BUCKET() \
|
||||
#define HTTP_ON_HTTPS_PORT_BUCKET(alloc) \
|
||||
apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \
|
||||
sizeof(HTTP_ON_HTTPS_PORT) - 1)
|
||||
sizeof(HTTP_ON_HTTPS_PORT) - 1, \
|
||||
alloc)
|
||||
|
||||
static apr_status_t ssl_io_filter_error(ap_filter_t *f,
|
||||
apr_bucket_brigade *bb,
|
||||
@@ -750,7 +753,7 @@ static apr_status_t ssl_io_filter_error(ap_filter_t *f,
|
||||
"trying to send HTML error page");
|
||||
|
||||
/* fake the request line */
|
||||
bucket = HTTP_ON_HTTPS_PORT_BUCKET();
|
||||
bucket = HTTP_ON_HTTPS_PORT_BUCKET(f->c->bucket_alloc);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -824,7 +827,7 @@ static apr_status_t ssl_io_filter_Input(ap_filter_t *f,
|
||||
|
||||
if (len > 0) {
|
||||
apr_bucket *bucket =
|
||||
apr_bucket_transient_create(ctx->buffer, len);
|
||||
apr_bucket_transient_create(ctx->buffer, len, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, bucket);
|
||||
}
|
||||
|
||||
@@ -847,7 +850,7 @@ static void ssl_io_input_add_filter(SSLFilterRec *frec, conn_rec *c,
|
||||
ctx->inbio.ssl = ssl;
|
||||
ctx->inbio.wbio = frec->pbioWrite;
|
||||
ctx->inbio.f = frec->pInputFilter;
|
||||
ctx->inbio.bb = apr_brigade_create(c->pool);
|
||||
ctx->inbio.bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||||
ctx->inbio.bucket = NULL;
|
||||
ctx->inbio.cbuf.length = 0;
|
||||
|
||||
|
@@ -122,7 +122,7 @@ static apr_status_t bucketeer_out_filter(ap_filter_t *f,
|
||||
|
||||
/* We're cool with filtering this. */
|
||||
ctx = f->ctx = apr_pcalloc(f->r->pool, sizeof(*ctx));
|
||||
ctx->bb = apr_brigade_create(f->r->pool);
|
||||
ctx->bb = apr_brigade_create(f->r->pool, f->c->bucket_alloc);
|
||||
apr_table_unset(f->r->headers_out, "Content-Length");
|
||||
}
|
||||
|
||||
@@ -163,13 +163,13 @@ static apr_status_t bucketeer_out_filter(ap_filter_t *f,
|
||||
p = apr_bucket_pool_create(apr_pmemdup( f->r->pool,
|
||||
&data[lastpos],
|
||||
i-lastpos),
|
||||
i-lastpos,
|
||||
f->r->pool);
|
||||
i-lastpos, f->r->pool,
|
||||
f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
|
||||
}
|
||||
lastpos=i+1;
|
||||
if ( data[i] == c->flushdelimiter) {
|
||||
p = apr_bucket_flush_create();
|
||||
p = apr_bucket_flush_create(f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
|
||||
}
|
||||
if ( data[i] == c->flushdelimiter || data[i] == c->passdelimiter ) {
|
||||
@@ -181,7 +181,11 @@ static apr_status_t bucketeer_out_filter(ap_filter_t *f,
|
||||
/* XXX: really should append this to the next 'real' bucket */
|
||||
if ( lastpos < i ) {
|
||||
apr_bucket *p;
|
||||
p = apr_bucket_pool_create(apr_pmemdup( f->r->pool,&data[lastpos],i-lastpos),i-lastpos,f->r->pool);
|
||||
p = apr_bucket_pool_create(apr_pmemdup(f->r->pool,
|
||||
&data[lastpos],
|
||||
i-lastpos),
|
||||
i-lastpos, f->r->pool,
|
||||
f->c->bucket_alloc);
|
||||
lastpos=i;
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->bb,p);
|
||||
}
|
||||
|
@@ -80,8 +80,8 @@ APR_HOOK_STRUCT(
|
||||
APR_HOOK_LINK(pre_connection)
|
||||
)
|
||||
AP_IMPLEMENT_HOOK_RUN_FIRST(conn_rec *,create_connection,
|
||||
(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh),
|
||||
(p, server, csd, conn_id, sbh), NULL)
|
||||
(apr_pool_t *p, server_rec *server, apr_socket_t *csd, long conn_id, void *sbh, apr_bucket_alloc_t *alloc),
|
||||
(p, server, csd, conn_id, sbh, alloc), NULL)
|
||||
AP_IMPLEMENT_HOOK_RUN_FIRST(int,process_connection,(conn_rec *c),(c),DECLINED)
|
||||
AP_IMPLEMENT_HOOK_RUN_ALL(int,pre_connection,(conn_rec *c, void *csd),(c, csd),OK,DECLINED)
|
||||
/*
|
||||
@@ -113,8 +113,8 @@ AP_CORE_DECLARE(void) ap_flush_conn(conn_rec *c)
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
|
||||
bb = apr_brigade_create(c->pool);
|
||||
b = apr_bucket_flush_create();
|
||||
bb = apr_brigade_create(c->pool, c->bucket_alloc);
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(c->output_filters, bb);
|
||||
}
|
||||
|
@@ -3122,6 +3122,7 @@ static int core_override_type(request_rec *r)
|
||||
|
||||
static int default_handler(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *e;
|
||||
core_dir_config *d;
|
||||
@@ -3215,7 +3216,7 @@ static int default_handler(request_rec *r)
|
||||
ap_md5digest(r->pool, fd));
|
||||
}
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
#if APR_HAS_LARGE_FILES
|
||||
if (r->finfo.size > AP_MAX_SENDFILE) {
|
||||
/* APR_HAS_LARGE_FILES issue; must split into mutiple buckets,
|
||||
@@ -3223,7 +3224,8 @@ static int default_handler(request_rec *r)
|
||||
* in case the brigade code/filters attempt to read it directly.
|
||||
*/
|
||||
apr_off_t fsize = r->finfo.size;
|
||||
e = apr_bucket_file_create(fd, 0, AP_MAX_SENDFILE, r->pool);
|
||||
e = apr_bucket_file_create(fd, 0, AP_MAX_SENDFILE, r->pool,
|
||||
c->bucket_alloc);
|
||||
while (fsize > AP_MAX_SENDFILE) {
|
||||
apr_bucket *ce;
|
||||
apr_bucket_copy(e, &ce);
|
||||
@@ -3235,10 +3237,11 @@ static int default_handler(request_rec *r)
|
||||
}
|
||||
else
|
||||
#endif
|
||||
e = apr_bucket_file_create(fd, 0, (apr_size_t)r->finfo.size, r->pool);
|
||||
e = apr_bucket_file_create(fd, 0, (apr_size_t)r->finfo.size,
|
||||
r->pool, c->bucket_alloc);
|
||||
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, e);
|
||||
|
||||
return ap_pass_brigade(r->output_filters, bb);
|
||||
@@ -3320,10 +3323,10 @@ static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
||||
if (!ctx)
|
||||
{
|
||||
ctx = apr_pcalloc(f->c->pool, sizeof(*ctx));
|
||||
ctx->b = apr_brigade_create(f->c->pool);
|
||||
ctx->b = apr_brigade_create(f->c->pool, f->c->bucket_alloc);
|
||||
|
||||
/* seed the brigade with the client socket. */
|
||||
e = apr_bucket_socket_create(net->client_socket);
|
||||
e = apr_bucket_socket_create(net->client_socket, f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(ctx->b, e);
|
||||
net->in_ctx = ctx;
|
||||
}
|
||||
@@ -3410,7 +3413,7 @@ static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
||||
* so tack on an EOS too. */
|
||||
/* We have read until the brigade was empty, so we know that we
|
||||
* must be EOS. */
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(b, e);
|
||||
return APR_SUCCESS;
|
||||
}
|
||||
@@ -3444,7 +3447,7 @@ static int core_input_filter(ap_filter_t *f, apr_bucket_brigade *b,
|
||||
apr_bucket_delete(e);
|
||||
|
||||
if (mode == AP_MODE_READBYTES) {
|
||||
e = apr_bucket_eos_create();
|
||||
e = apr_bucket_eos_create(f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(b, e);
|
||||
}
|
||||
return APR_SUCCESS;
|
||||
@@ -3618,7 +3621,8 @@ static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
b = bb;
|
||||
}
|
||||
else {
|
||||
temp_brig = apr_brigade_create(f->c->pool);
|
||||
temp_brig = apr_brigade_create(f->c->pool,
|
||||
f->c->bucket_alloc);
|
||||
}
|
||||
|
||||
temp = APR_BRIGADE_FIRST(b);
|
||||
@@ -3722,7 +3726,8 @@ static apr_status_t core_output_filter(ap_filter_t *f, apr_bucket_brigade *b)
|
||||
* after the request_pool is cleared.
|
||||
*/
|
||||
if (ctx->b == NULL) {
|
||||
ctx->b = apr_brigade_create(net->c->pool);
|
||||
ctx->b = apr_brigade_create(net->c->pool,
|
||||
net->c->bucket_alloc);
|
||||
}
|
||||
|
||||
APR_BRIGADE_FOREACH(bucket, b) {
|
||||
@@ -3925,7 +3930,7 @@ static int core_create_req(request_rec *r)
|
||||
req_cfg->bb = main_req_cfg->bb;
|
||||
}
|
||||
else {
|
||||
req_cfg->bb = apr_brigade_create(r->pool);
|
||||
req_cfg->bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
|
||||
if (!r->prev) {
|
||||
ap_add_input_filter_handle(ap_net_time_filter_handle,
|
||||
NULL, r, r->connection);
|
||||
@@ -3948,7 +3953,8 @@ static int core_create_proxy_req(request_rec *r, request_rec *pr)
|
||||
}
|
||||
|
||||
static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
|
||||
apr_socket_t *csd, long id, void *sbh)
|
||||
apr_socket_t *csd, long id, void *sbh,
|
||||
apr_bucket_alloc_t *alloc)
|
||||
{
|
||||
apr_status_t rv;
|
||||
conn_rec *c = (conn_rec *) apr_pcalloc(ptrans, sizeof(conn_rec));
|
||||
@@ -3984,6 +3990,8 @@ static conn_rec *core_create_conn(apr_pool_t *ptrans, server_rec *server,
|
||||
c->base_server = server;
|
||||
|
||||
c->id = id;
|
||||
c->bucket_alloc = alloc;
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
|
@@ -55,7 +55,6 @@
|
||||
#include "http_protocol.h"
|
||||
#include "apr_buckets.h"
|
||||
#include "apr_strings.h"
|
||||
#include <stdlib.h>
|
||||
#if APR_HAVE_STRINGS_H
|
||||
#include <strings.h>
|
||||
#endif
|
||||
@@ -73,10 +72,7 @@ AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
|
||||
{
|
||||
ap_bucket_error *h;
|
||||
|
||||
h = malloc(sizeof(*h));
|
||||
if (h == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
h = apr_bucket_alloc(sizeof(*h), b->list);
|
||||
h->status = error;
|
||||
h->data = (buf) ? apr_pstrdup(p, buf) : NULL;
|
||||
|
||||
@@ -87,19 +83,21 @@ AP_DECLARE(apr_bucket *) ap_bucket_error_make(apr_bucket *b, int error,
|
||||
return b;
|
||||
}
|
||||
|
||||
AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error,
|
||||
const char *buf, apr_pool_t *p)
|
||||
AP_DECLARE(apr_bucket *) ap_bucket_error_create(int error, const char *buf,
|
||||
apr_pool_t *p,
|
||||
apr_bucket_alloc_t *list)
|
||||
{
|
||||
apr_bucket *b = (apr_bucket *)malloc(sizeof(*b));
|
||||
apr_bucket *b = apr_bucket_alloc(sizeof(*b), list);
|
||||
|
||||
APR_BUCKET_INIT(b);
|
||||
b->free = free;
|
||||
b->free = apr_bucket_free;
|
||||
b->list = list;
|
||||
return ap_bucket_error_make(b, error, buf, p);
|
||||
}
|
||||
|
||||
AP_DECLARE_DATA const apr_bucket_type_t ap_bucket_type_error = {
|
||||
"ERROR", 5,
|
||||
free,
|
||||
apr_bucket_free,
|
||||
error_read,
|
||||
apr_bucket_setaside_notimpl,
|
||||
apr_bucket_split_notimpl,
|
||||
|
@@ -324,7 +324,8 @@ int ap_graceful_stop_signalled(void)
|
||||
* Child process main loop.
|
||||
*/
|
||||
|
||||
static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num)
|
||||
static void process_socket(apr_pool_t *p, apr_socket_t *sock,
|
||||
int my_child_num, apr_bucket_alloc_t *bucket_alloc)
|
||||
{
|
||||
conn_rec *current_conn;
|
||||
long conn_id = my_child_num;
|
||||
@@ -359,6 +360,7 @@ static int32 worker_thread(void * dummy)
|
||||
apr_allocator_t *allocator;
|
||||
apr_socket_t *csd = NULL;
|
||||
apr_pool_t *ptrans; /* Pool for per-transaction stuff */
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
apr_socket_t *sd = NULL;
|
||||
apr_status_t rv = APR_EINIT;
|
||||
int srv , n;
|
||||
@@ -393,6 +395,8 @@ static int32 worker_thread(void * dummy)
|
||||
for(n=0 ; n <= num_listening_sockets ; n++)
|
||||
apr_poll_socket_add(pollset, listening_sockets[n], APR_POLLIN);
|
||||
|
||||
bucket_alloc = apr_bucket_alloc_create(tpool);
|
||||
|
||||
while (1) {
|
||||
/* If we're here, then chances are (unless we're the first thread created)
|
||||
* we're going to be held up in the accept mutex, so doing this here
|
||||
@@ -480,7 +484,7 @@ static int32 worker_thread(void * dummy)
|
||||
ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf,
|
||||
"apr_accept");
|
||||
} else {
|
||||
process_socket(ptrans, csd, child_slot);
|
||||
process_socket(ptrans, csd, child_slot, bucket_alloc);
|
||||
requests_this_child--;
|
||||
}
|
||||
}
|
||||
@@ -493,6 +497,8 @@ static int32 worker_thread(void * dummy)
|
||||
|
||||
ap_update_child_status_from_indexes(0, child_slot, SERVER_DEAD, (request_rec*)NULL);
|
||||
|
||||
apr_bucket_alloc_destroy(bucket_alloc);
|
||||
|
||||
ap_log_error(APLOG_MARK, APLOG_NOTICE | APLOG_NOERRNO, 0, NULL,
|
||||
"worker_thread %ld exiting", find_thread(NULL));
|
||||
|
||||
|
@@ -1540,19 +1540,19 @@ static int pass_request(request_rec *r)
|
||||
struct cmsghdr *cmsg;
|
||||
int sfd;
|
||||
struct iovec iov;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
perchild_server_conf *sconf = (perchild_server_conf *)
|
||||
ap_get_module_config(r->server->module_config,
|
||||
&mpm_perchild_module);
|
||||
char *foo;
|
||||
apr_size_t len;
|
||||
|
||||
apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER",
|
||||
r->connection->pool);
|
||||
apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER", c->pool);
|
||||
len = strlen(foo);
|
||||
|
||||
apr_pool_userdata_set(NULL, "PERCHILD_BUFFER", apr_pool_cleanup_null,
|
||||
r->connection->pool);
|
||||
c->pool);
|
||||
|
||||
apr_os_sock_get(&sfd, thesock);
|
||||
|
||||
|
@@ -400,6 +400,7 @@ static void worker_main(void *vpArg)
|
||||
long conn_id;
|
||||
conn_rec *current_conn;
|
||||
apr_pool_t *pconn;
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
worker_args_t *worker_args;
|
||||
HQUEUE workq;
|
||||
PID owner;
|
||||
@@ -430,14 +431,18 @@ static void worker_main(void *vpArg)
|
||||
while (rc = DosReadQueue(workq, &rd, &len, (PPVOID)&worker_args, 0, DCWW_WAIT, &priority, NULLHANDLE),
|
||||
rc == 0 && rd.ulData != WORKTYPE_EXIT) {
|
||||
pconn = worker_args->pconn;
|
||||
bucket_alloc = apr_bucket_alloc_create(pconn);
|
||||
ap_create_sb_handle(&sbh, pconn, child_slot, thread_slot);
|
||||
current_conn = ap_run_create_connection(pconn, ap_server_conf, worker_args->conn_sd, conn_id, sbh);
|
||||
current_conn = ap_run_create_connection(pconn, ap_server_conf,
|
||||
worker_args->conn_sd, conn_id,
|
||||
sbh, bucket_alloc);
|
||||
|
||||
if (current_conn) {
|
||||
ap_process_connection(current_conn, worker_args->conn_sd);
|
||||
ap_lingering_close(current_conn);
|
||||
}
|
||||
|
||||
apr_bucket_alloc_destroy(bucket_alloc);
|
||||
apr_pool_destroy(pconn);
|
||||
ap_update_child_status_from_indexes(child_slot, thread_slot,
|
||||
SERVER_READY, NULL);
|
||||
|
@@ -353,6 +353,7 @@ void worker_main(void *arg)
|
||||
ap_listen_rec *last_lr = NULL;
|
||||
apr_pool_t *ptrans;
|
||||
apr_allocator_t *allocator;
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
conn_rec *current_conn;
|
||||
apr_status_t stat = APR_EINIT;
|
||||
int worker_num_arg = (int)arg;
|
||||
@@ -374,6 +375,8 @@ void worker_main(void *arg)
|
||||
apr_pool_create_ex(&ptrans, NULL, NULL, allocator);
|
||||
apr_allocator_set_owner(allocator, ptrans);
|
||||
|
||||
bucket_alloc = apr_bucket_alloc_create(ptrans);
|
||||
|
||||
apr_pool_tag(ptrans, "transaction");
|
||||
|
||||
apr_thread_mutex_lock(worker_thread_count_mutex);
|
||||
@@ -533,7 +536,8 @@ got_listener:
|
||||
* socket options, file descriptors, and read/write buffers.
|
||||
*/
|
||||
current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd,
|
||||
my_worker_num, sbh);
|
||||
my_worker_num, sbh,
|
||||
bucket_alloc);
|
||||
if (current_conn) {
|
||||
ap_process_connection(current_conn, csd);
|
||||
ap_lingering_close(current_conn);
|
||||
|
@@ -1540,19 +1540,19 @@ static int pass_request(request_rec *r)
|
||||
struct cmsghdr *cmsg;
|
||||
int sfd;
|
||||
struct iovec iov;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
perchild_server_conf *sconf = (perchild_server_conf *)
|
||||
ap_get_module_config(r->server->module_config,
|
||||
&mpm_perchild_module);
|
||||
char *foo;
|
||||
apr_size_t len;
|
||||
|
||||
apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER",
|
||||
r->connection->pool);
|
||||
apr_pool_userdata_get((void **)&foo, "PERCHILD_BUFFER", c->pool);
|
||||
len = strlen(foo);
|
||||
|
||||
apr_pool_userdata_set(NULL, "PERCHILD_BUFFER", apr_pool_cleanup_null,
|
||||
r->connection->pool);
|
||||
c->pool);
|
||||
|
||||
apr_os_sock_get(&sfd, thesock);
|
||||
|
||||
|
@@ -527,6 +527,7 @@ static void child_main(int child_num_arg)
|
||||
void *csd;
|
||||
ap_sb_handle_t *sbh;
|
||||
apr_status_t rv;
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
|
||||
my_child_num = child_num_arg;
|
||||
ap_my_pid = getpid();
|
||||
@@ -576,6 +577,8 @@ static void child_main(int child_num_arg)
|
||||
for (i = 0; i < num_listensocks; i++)
|
||||
apr_poll_socket_add(pollset, listensocks[i].sd, APR_POLLIN);
|
||||
|
||||
bucket_alloc = apr_bucket_alloc_create(pchild);
|
||||
|
||||
while (!die_now) {
|
||||
/*
|
||||
* (Re)initialize this child to a pre-connection state.
|
||||
@@ -667,7 +670,7 @@ static void child_main(int child_num_arg)
|
||||
* socket options, file descriptors, and read/write buffers.
|
||||
*/
|
||||
|
||||
current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, my_child_num, sbh);
|
||||
current_conn = ap_run_create_connection(ptrans, ap_server_conf, csd, my_child_num, sbh, bucket_alloc);
|
||||
if (current_conn) {
|
||||
ap_process_connection(current_conn, csd);
|
||||
ap_lingering_close(current_conn);
|
||||
|
@@ -1052,6 +1052,7 @@ static void worker_main(long thread_num)
|
||||
{
|
||||
static int requests_this_child = 0;
|
||||
PCOMP_CONTEXT context = NULL;
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
apr_os_sock_info_t sockinfo;
|
||||
ap_sb_handle_t *sbh;
|
||||
|
||||
@@ -1075,6 +1076,9 @@ static void worker_main(long thread_num)
|
||||
break;
|
||||
}
|
||||
|
||||
/* XXX: where does this go? */
|
||||
bucket_alloc = apr_bucket_alloc_create(context->ptrans);
|
||||
|
||||
/* Have we hit MaxRequestPerChild connections? */
|
||||
if (ap_max_requests_per_child) {
|
||||
requests_this_child++;
|
||||
@@ -1092,8 +1096,9 @@ static void worker_main(long thread_num)
|
||||
apr_os_sock_make(&context->sock, &sockinfo, context->ptrans);
|
||||
|
||||
ap_create_sb_handle(&sbh, context->ptrans, 0, thread_num);
|
||||
c = ap_run_create_connection(context->ptrans, ap_server_conf, context->sock,
|
||||
thread_num, sbh);
|
||||
c = ap_run_create_connection(context->ptrans, ap_server_conf,
|
||||
context->sock, thread_num, sbh,
|
||||
bucket_alloc);
|
||||
|
||||
if (c) {
|
||||
ap_process_connection(c, context->sock);
|
||||
|
@@ -575,7 +575,7 @@ int ap_graceful_stop_signalled(void)
|
||||
*/
|
||||
|
||||
static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
|
||||
int my_thread_num)
|
||||
int my_thread_num, apr_bucket_alloc_t *bucket_alloc)
|
||||
{
|
||||
conn_rec *current_conn;
|
||||
long conn_id = ID_FROM_CHILD_THREAD(my_child_num, my_thread_num);
|
||||
@@ -595,7 +595,8 @@ static void process_socket(apr_pool_t *p, apr_socket_t *sock, int my_child_num,
|
||||
return;
|
||||
}
|
||||
|
||||
current_conn = ap_run_create_connection(p, ap_server_conf, sock, conn_id, sbh);
|
||||
current_conn = ap_run_create_connection(p, ap_server_conf, sock,
|
||||
conn_id, sbh, bucket_alloc);
|
||||
if (current_conn) {
|
||||
ap_process_connection(current_conn, sock);
|
||||
ap_lingering_close(current_conn);
|
||||
@@ -834,6 +835,7 @@ static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
|
||||
int process_slot = ti->pid;
|
||||
int thread_slot = ti->tid;
|
||||
apr_socket_t *csd = NULL;
|
||||
apr_bucket_alloc_t *bucket_alloc;
|
||||
apr_pool_t *last_ptrans = NULL;
|
||||
apr_pool_t *ptrans; /* Pool for per-transaction stuff */
|
||||
apr_status_t rv;
|
||||
@@ -841,6 +843,9 @@ static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
|
||||
free(ti);
|
||||
|
||||
ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_STARTING, NULL);
|
||||
|
||||
bucket_alloc = apr_bucket_alloc_create(apr_thread_pool_get(thd));
|
||||
|
||||
while (!workers_may_exit) {
|
||||
ap_update_child_status_from_indexes(process_slot, thread_slot, SERVER_READY, NULL);
|
||||
rv = ap_queue_pop(worker_queue, &csd, &ptrans, last_ptrans);
|
||||
@@ -870,7 +875,7 @@ static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
process_socket(ptrans, csd, process_slot, thread_slot);
|
||||
process_socket(ptrans, csd, process_slot, thread_slot, bucket_alloc);
|
||||
requests_this_child--; /* FIXME: should be synchronized - aaron */
|
||||
apr_pool_clear(ptrans);
|
||||
last_ptrans = ptrans;
|
||||
@@ -879,6 +884,8 @@ static void * APR_THREAD_FUNC worker_thread(apr_thread_t *thd, void * dummy)
|
||||
ap_update_child_status_from_indexes(process_slot, thread_slot,
|
||||
(dying) ? SERVER_DEAD : SERVER_GRACEFUL, (request_rec *) NULL);
|
||||
|
||||
apr_bucket_alloc_destroy(bucket_alloc);
|
||||
|
||||
apr_thread_exit(thd, APR_SUCCESS);
|
||||
return NULL;
|
||||
}
|
||||
|
@@ -217,7 +217,7 @@ AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n,
|
||||
char *pos, *last_char = *s;
|
||||
int do_alloc = (*s == NULL), saw_eos = 0;
|
||||
|
||||
b = apr_brigade_create(r->pool);
|
||||
b = apr_brigade_create(r->pool, r->connection->bucket_alloc);
|
||||
rv = ap_get_brigade(r->input_filters, b, AP_MODE_GETLINE,
|
||||
APR_BLOCK_READ, 0);
|
||||
|
||||
@@ -405,7 +405,7 @@ AP_DECLARE(apr_status_t) ap_rgetline_core(char **s, apr_size_t n,
|
||||
char c;
|
||||
|
||||
/* Create a brigade for this filter read. */
|
||||
bb = apr_brigade_create(r->pool);
|
||||
bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
|
||||
|
||||
/* We only care about the first byte. */
|
||||
rv = ap_get_brigade(r->input_filters, bb, AP_MODE_SPECULATIVE,
|
||||
@@ -984,11 +984,12 @@ void ap_set_sub_req_protocol(request_rec *rnew, const request_rec *r)
|
||||
|
||||
static void end_output_stream(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_eos_create();
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_eos_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
}
|
||||
@@ -1269,12 +1270,13 @@ AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r,
|
||||
apr_off_t offset, apr_size_t len,
|
||||
apr_size_t *nbytes)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb = NULL;
|
||||
apr_bucket *b;
|
||||
apr_status_t rv;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_file_create(fd, offset, len, r->pool);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_file_create(fd, offset, len, r->pool, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
rv = ap_pass_brigade(r->output_filters, bb);
|
||||
@@ -1293,11 +1295,12 @@ AP_DECLARE(apr_status_t) ap_send_fd(apr_file_t *fd, request_rec *r,
|
||||
AP_DECLARE(size_t) ap_send_mmap(apr_mmap_t *mm, request_rec *r, size_t offset,
|
||||
size_t length)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb = NULL;
|
||||
apr_bucket *b;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_mmap_create(mm, offset, length);
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_mmap_create(mm, offset, length, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
ap_pass_brigade(r->output_filters, bb);
|
||||
|
||||
@@ -1332,6 +1335,7 @@ AP_CORE_DECLARE_NONSTD(apr_status_t) ap_old_write_filter(
|
||||
static apr_status_t buffer_output(request_rec *r,
|
||||
const char *str, apr_size_t len)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
ap_filter_t *f;
|
||||
old_write_filter_ctx *ctx;
|
||||
|
||||
@@ -1359,8 +1363,8 @@ static apr_status_t buffer_output(request_rec *r,
|
||||
* deliver the content through the normal filter chain
|
||||
*/
|
||||
if (f != r->output_filters) {
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool);
|
||||
apr_bucket *b = apr_bucket_transient_create(str, len);
|
||||
apr_bucket_brigade *bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
apr_bucket *b = apr_bucket_transient_create(str, len, c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
|
||||
return ap_pass_brigade(r->output_filters, bb);
|
||||
@@ -1370,7 +1374,7 @@ static apr_status_t buffer_output(request_rec *r,
|
||||
ctx = r->output_filters->ctx;
|
||||
|
||||
if (ctx->bb == NULL) {
|
||||
ctx->bb = apr_brigade_create(r->pool);
|
||||
ctx->bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
}
|
||||
|
||||
return ap_fwrite(f->next, ctx->bb, str, len);
|
||||
@@ -1525,11 +1529,12 @@ AP_DECLARE_NONSTD(int) ap_rvputs(request_rec *r, ...)
|
||||
|
||||
AP_DECLARE(int) ap_rflush(request_rec *r)
|
||||
{
|
||||
conn_rec *c = r->connection;
|
||||
apr_bucket_brigade *bb;
|
||||
apr_bucket *b;
|
||||
|
||||
bb = apr_brigade_create(r->pool);
|
||||
b = apr_bucket_flush_create();
|
||||
bb = apr_brigade_create(r->pool, c->bucket_alloc);
|
||||
b = apr_bucket_flush_create(c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
if (ap_pass_brigade(r->output_filters, bb) != APR_SUCCESS)
|
||||
return -1;
|
||||
|
@@ -547,7 +547,7 @@ AP_DECLARE(apr_status_t) ap_save_brigade(ap_filter_t *f,
|
||||
* create an empty bucket brigade so that we can concat.
|
||||
*/
|
||||
if (!(*saveto)) {
|
||||
*saveto = apr_brigade_create(p);
|
||||
*saveto = apr_brigade_create(p, f->c->bucket_alloc);
|
||||
}
|
||||
|
||||
APR_RING_FOREACH(e, &(*b)->list, apr_bucket, link) {
|
||||
@@ -575,7 +575,7 @@ AP_DECLARE(apr_status_t) ap_fflush(ap_filter_t *f, apr_bucket_brigade *bb)
|
||||
{
|
||||
apr_bucket *b;
|
||||
|
||||
b = apr_bucket_flush_create();
|
||||
b = apr_bucket_flush_create(f->c->bucket_alloc);
|
||||
APR_BRIGADE_INSERT_TAIL(bb, b);
|
||||
return ap_pass_brigade(f, bb);
|
||||
}
|
||||
|
Reference in New Issue
Block a user