113 lines
3.6 KiB
Diff
113 lines
3.6 KiB
Diff
|
--- modules/fcgid/fcgid_proc_win.c 2015-08-28 13:39:44.583673500 +0200
|
||
|
+++ modules/fcgid/fcgid_proc_win.c 2015-08-28 13:40:05.588100000 +0200
|
||
|
@@ -380,19 +380,22 @@
|
||
|
apr_bucket *bucket_request;
|
||
|
apr_status_t rv;
|
||
|
DWORD transferred;
|
||
|
+ apr_bucket_brigade* tmpbb = apr_brigade_create(birgade_send->p,
|
||
|
+ birgade_send->bucket_alloc);
|
||
|
|
||
|
handle_info = (fcgid_namedpipe_handle *) ipc_handle->ipc_handle_info;
|
||
|
|
||
|
- for (bucket_request = APR_BRIGADE_FIRST(birgade_send);
|
||
|
- bucket_request != APR_BRIGADE_SENTINEL(birgade_send);
|
||
|
- bucket_request = APR_BUCKET_NEXT(bucket_request))
|
||
|
- {
|
||
|
+ while (!APR_BRIGADE_EMPTY(birgade_send)) {
|
||
|
const char *write_buf;
|
||
|
apr_size_t write_buf_len;
|
||
|
apr_size_t has_write;
|
||
|
|
||
|
- if (APR_BUCKET_IS_METADATA(bucket_request))
|
||
|
+ bucket_request = APR_BRIGADE_FIRST(birgade_send);
|
||
|
+
|
||
|
+ if (APR_BUCKET_IS_METADATA(bucket_request)) {
|
||
|
+ apr_bucket_delete(bucket_request);
|
||
|
continue;
|
||
|
+ }
|
||
|
|
||
|
if ((rv = apr_bucket_read(bucket_request, &write_buf, &write_buf_len,
|
||
|
APR_BLOCK_READ)) != APR_SUCCESS) {
|
||
|
@@ -401,6 +404,9 @@
|
||
|
return rv;
|
||
|
}
|
||
|
|
||
|
+ APR_BUCKET_REMOVE(bucket_request);
|
||
|
+ APR_BRIGADE_INSERT_TAIL(tmpbb, bucket_request);
|
||
|
+
|
||
|
/* Write the buffer to fastcgi server */
|
||
|
has_write = 0;
|
||
|
while (has_write < write_buf_len) {
|
||
|
@@ -411,6 +417,7 @@
|
||
|
write_buf_len - has_write,
|
||
|
&byteswrite, &handle_info->overlap_write)) {
|
||
|
has_write += byteswrite;
|
||
|
+ apr_brigade_cleanup(tmpbb);
|
||
|
continue;
|
||
|
} else if ((rv = GetLastError()) != ERROR_IO_PENDING) {
|
||
|
ap_log_rerror(APLOG_MARK, APLOG_WARNING,
|
||
|
@@ -437,6 +444,7 @@
|
||
|
return APR_ESPIPE;
|
||
|
}
|
||
|
has_write += transferred;
|
||
|
+ apr_brigade_cleanup(tmpbb);
|
||
|
continue;
|
||
|
} else {
|
||
|
ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0,
|
||
|
@@ -448,6 +456,7 @@
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+ apr_brigade_destroy(tmpbb);
|
||
|
return APR_SUCCESS;
|
||
|
}
|
||
|
|
||
|
--- modules/fcgid/fcgid_proc_unix.c 2015-08-28 13:39:44.614914500 +0200
|
||
|
+++ modules/fcgid/fcgid_proc_unix.c 2015-08-28 13:39:44.724299600 +0200
|
||
|
@@ -762,14 +762,16 @@
|
||
|
struct iovec vec[FCGID_VEC_COUNT];
|
||
|
int nvec = 0;
|
||
|
apr_bucket *e;
|
||
|
+ apr_bucket_brigade* tmpbb = apr_brigade_create(output_brigade->p,output_brigade->bucket_alloc);
|
||
|
+
|
||
|
+ while (!APR_BRIGADE_EMPTY(output_brigade)) {
|
||
|
+ e = APR_BRIGADE_FIRST(output_brigade);
|
||
|
|
||
|
- for (e = APR_BRIGADE_FIRST(output_brigade);
|
||
|
- e != APR_BRIGADE_SENTINEL(output_brigade);
|
||
|
- e = APR_BUCKET_NEXT(e)) {
|
||
|
apr_size_t len;
|
||
|
const char* base;
|
||
|
|
||
|
if (APR_BUCKET_IS_METADATA(e)) {
|
||
|
+ apr_bucket_delete(e);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
@@ -780,6 +782,9 @@
|
||
|
return rv;
|
||
|
}
|
||
|
|
||
|
+ APR_BUCKET_REMOVE(e);
|
||
|
+ APR_BRIGADE_INSERT_TAIL(tmpbb, e);
|
||
|
+
|
||
|
vec[nvec].iov_len = len;
|
||
|
vec[nvec].iov_base = (char*) base;
|
||
|
if (nvec == (FCGID_VEC_COUNT - 1)) {
|
||
|
@@ -789,6 +794,7 @@
|
||
|
FCGID_VEC_COUNT)) != APR_SUCCESS)
|
||
|
return rv;
|
||
|
nvec = 0;
|
||
|
+ apr_brigade_cleanup(tmpbb);
|
||
|
}
|
||
|
else
|
||
|
nvec++;
|
||
|
@@ -800,6 +806,7 @@
|
||
|
return rv;
|
||
|
}
|
||
|
|
||
|
+ apr_brigade_destroy(tmpbb);
|
||
|
return APR_SUCCESS;
|
||
|
}
|
||
|
|