/* Per-request configuration */
typedef struct {
- /* bucket brigade used by getline for look-ahead */
+ /* bucket brigade used by getline for look-ahead and
+ * ap_get_client_block for holding left-over request body */
struct ap_bucket_brigade *bb;
} core_request_config;
apr_array_header_t *output_filters;
apr_array_header_t *input_filters;
- /* bucket brigade held by ap_get_client_block() between calls */
- struct ap_bucket_brigade *bb;
} core_dir_config;
/* Per-server core configuration */
r->request_config = ap_create_request_config(r->pool);
req_cfg = apr_pcalloc(r->pool, sizeof(core_request_config));
+ req_cfg->bb = ap_brigade_create(r->pool);
ap_set_module_config(r->request_config, &core_module, req_cfg);
r->per_dir_config = r->server->lookup_defaults;
return HTTP_REQUEST_ENTITY_TOO_LARGE;
}
+#ifdef AP_DEBUG
+ {
+ /* Make sure getline() didn't leave any droppings. */
+ core_request_config *req_cfg =
+ (core_request_config *)ap_get_module_config(r->request_config,
+ &core_module);
+ AP_DEBUG_ASSERT(AP_BRIGADE_EMPTY(req_cfg->bb));
+ }
+#endif
+
return OK;
}
apr_int32_t timeout;
ap_bucket *b, *old;
const char *tempbuf;
- core_dir_config *conf =
- (core_dir_config *)ap_get_module_config(r->per_dir_config,
- &core_module);
- ap_bucket_brigade *bb = conf->bb;
-
- if (!bb) {
- conf->bb = bb = ap_brigade_create(r->pool);
- }
+ core_request_config *req_cfg =
+ (core_request_config *)ap_get_module_config(r->request_config,
+ &core_module);
+ ap_bucket_brigade *bb = req_cfg->bb;
do {
if (AP_BRIGADE_EMPTY(bb)) {