PHP: prevention of consuming unread request body on finalization.
The php_request_shutdown() function calls sapi_deactivate() that tries to read request body into a dummy buffer. In our case it's just waste of CPU cycles. This change is also required for the following implementation of the fastcgi_finish_request() function, where the request context can be cleared by the time of finalization.
This commit is contained in:
@@ -934,6 +934,9 @@ nxt_php_dynamic_request(nxt_php_run_ctx_t *ctx, nxt_unit_request_t *r)
|
|||||||
static void
|
static void
|
||||||
nxt_php_execute(nxt_php_run_ctx_t *ctx, nxt_unit_request_t *r)
|
nxt_php_execute(nxt_php_run_ctx_t *ctx, nxt_unit_request_t *r)
|
||||||
{
|
{
|
||||||
|
#if (PHP_VERSION_ID < 50600)
|
||||||
|
void *read_post;
|
||||||
|
#endif
|
||||||
nxt_unit_field_t *f;
|
nxt_unit_field_t *f;
|
||||||
zend_file_handle file_handle;
|
zend_file_handle file_handle;
|
||||||
|
|
||||||
@@ -990,9 +993,21 @@ nxt_php_execute(nxt_php_run_ctx_t *ctx, nxt_unit_request_t *r)
|
|||||||
|
|
||||||
php_execute_script(&file_handle TSRMLS_CC);
|
php_execute_script(&file_handle TSRMLS_CC);
|
||||||
|
|
||||||
|
/* Prevention of consuming possible unread request body. */
|
||||||
|
#if (PHP_VERSION_ID < 50600)
|
||||||
|
read_post = sapi_module.read_post;
|
||||||
|
sapi_module.read_post = NULL;
|
||||||
|
#else
|
||||||
|
SG(post_read) = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
php_request_shutdown(NULL);
|
php_request_shutdown(NULL);
|
||||||
|
|
||||||
nxt_unit_request_done(ctx->req, NXT_UNIT_OK);
|
nxt_unit_request_done(ctx->req, NXT_UNIT_OK);
|
||||||
|
|
||||||
|
#if (PHP_VERSION_ID < 50600)
|
||||||
|
sapi_module.read_post = read_post;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user