Welcome! Log In Create A New Profile

Advanced

[nginx] svn commit: r5097 - trunk/src/http

Anonymous User
March 01, 2013 09:56AM
Author: vbart
Date: 2013-03-01 14:55:42 +0000 (Fri, 01 Mar 2013)
New Revision: 5097
URL: http://trac.nginx.org/nginx/changeset/5097/nginx

Log:
Allocate request object from its own pool.

Previously, it was allocated from a connection pool and
was selectively freed for an idle keepalive connection.

The goal is to put coupled things in one chunk of memory,
and to simplify handling of request objects.


Modified:
trunk/src/http/ngx_http_request.c
trunk/src/http/ngx_http_request.h

Modified: trunk/src/http/ngx_http_request.c
===================================================================
--- trunk/src/http/ngx_http_request.c 2013-02-27 17:41:34 UTC (rev 5096)
+++ trunk/src/http/ngx_http_request.c 2013-03-01 14:55:42 UTC (rev 5097)
@@ -365,6 +365,7 @@
static void
ngx_http_init_request(ngx_event_t *rev)
{
+ ngx_pool_t *pool;
ngx_time_t *tp;
ngx_connection_t *c;
ngx_http_request_t *r;
@@ -387,27 +388,25 @@

hc = c->data;

- r = hc->request;
+ cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);

- if (r) {
- ngx_memzero(r, sizeof(ngx_http_request_t));
+ pool = ngx_create_pool(cscf->request_pool_size, c->log);
+ if (pool == NULL) {
+ ngx_http_close_connection(c);
+ return;
+ }

- r->pipeline = hc->pipeline;
+ r = ngx_pcalloc(pool, sizeof(ngx_http_request_t));
+ if (r == NULL) {
+ ngx_destroy_pool(pool);
+ ngx_http_close_connection(c);
+ return;
+ }

- if (hc->nbusy) {
- r->header_in = hc->busy[0];
- }
+ r->pool = pool;

- } else {
- r = ngx_pcalloc(c->pool, sizeof(ngx_http_request_t));
- if (r == NULL) {
- ngx_http_close_connection(c);
- return;
- }
+ r->pipeline = hc->pipeline;

- hc->request = r;
- }
-
c->data = r;
r->http_connection = hc;

@@ -426,28 +425,18 @@

ngx_http_set_connection_log(r->connection, clcf->error_log);

- cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
-
if (c->buffer == NULL) {
c->buffer = ngx_create_temp_buf(c->pool,
cscf->client_header_buffer_size);
if (c->buffer == NULL) {
+ ngx_destroy_pool(r->pool);
ngx_http_close_connection(c);
return;
}
}

- if (r->header_in == NULL) {
- r->header_in = c->buffer;
- }
+ r->header_in = hc->nbusy ? hc->busy[0] : c->buffer;

- r->pool = ngx_create_pool(cscf->request_pool_size, c->log);
- if (r->pool == NULL) {
- ngx_http_close_connection(c);
- return;
- }
-
-
if (ngx_list_init(&r->headers_out.headers, r->pool, 20,
sizeof(ngx_table_elt_t))
!= NGX_OK)
@@ -2663,6 +2652,7 @@
}
}

+ /* guard against recursive call from ngx_http_finalize_connection() */
r->keepalive = 0;

ngx_http_free_request(r, 0);
@@ -2694,17 +2684,12 @@
hc->pipeline = 0;

/*
- * To keep a memory footprint as small as possible for an idle
- * keepalive connection we try to free the ngx_http_request_t and
- * c->buffer's memory if they were allocated outside the c->pool.
- * The large header buffers are always allocated outside the c->pool and
- * are freed too.
+ * To keep a memory footprint as small as possible for an idle keepalive
+ * connection we try to free c->buffer's memory if it was allocated outside
+ * the c->pool. The large header buffers are always allocated outside the
+ * c->pool and are freed too.
*/

- if (ngx_pfree(c->pool, r) == NGX_OK) {
- hc->request = NULL;
- }
-
b = c->buffer;

if (ngx_pfree(c->pool, b->start) == NGX_OK) {
@@ -3155,6 +3140,7 @@
ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
{
ngx_log_t *log;
+ ngx_pool_t *pool;
struct linger linger;
ngx_http_cleanup_t *cln;
ngx_http_log_ctx_t *ctx;
@@ -3221,7 +3207,15 @@

r->connection->destroyed = 1;

- ngx_destroy_pool(r->pool);
+ /*
+ * Setting r->pool to NULL will increase probability to catch double close
+ * of request since the request object is allocated from its own pool.
+ */
+
+ pool = r->pool;
+ r->pool = NULL;
+
+ ngx_destroy_pool(pool);
}



Modified: trunk/src/http/ngx_http_request.h
===================================================================
--- trunk/src/http/ngx_http_request.h 2013-02-27 17:41:34 UTC (rev 5096)
+++ trunk/src/http/ngx_http_request.h 2013-03-01 14:55:42 UTC (rev 5097)
@@ -302,8 +302,6 @@
#endif
#endif

- ngx_http_request_t *request;
-
ngx_buf_t **busy;
ngx_int_t nbusy;


_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] svn commit: r5097 - trunk/src/http

Anonymous User 756 March 01, 2013 09:56AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 306
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready