Welcome! Log In Create A New Profile

Advanced

[nginx] svn commit: r4424 - trunk/src/core

Anonymous User
January 30, 2012 07:54AM
Author: vbart
Date: 2012-01-30 12:53:57 +0000 (Mon, 30 Jan 2012)
New Revision: 4424

Modified:
trunk/src/core/ngx_regex.c
Log:
Fixed memory leak on HUP signal when PCRE JIT was used.

The PCRE JIT compiler uses mmap to allocate memory for its executable codes, so
we have to explicitly call the pcre_free_study() function to free this memory.


Modified: trunk/src/core/ngx_regex.c
===================================================================
--- trunk/src/core/ngx_regex.c 2012-01-30 11:22:56 UTC (rev 4423)
+++ trunk/src/core/ngx_regex.c 2012-01-30 12:53:57 UTC (rev 4424)
@@ -16,6 +16,9 @@

static void * ngx_libc_cdecl ngx_regex_malloc(size_t size);
static void ngx_libc_cdecl ngx_regex_free(void *p);
+#if (NGX_HAVE_PCRE_JIT)
+static void ngx_pcre_free_studies(void *data);
+#endif

static ngx_int_t ngx_regex_module_init(ngx_cycle_t *cycle);

@@ -274,6 +277,41 @@
}


+#if (NGX_HAVE_PCRE_JIT)
+
+static void
+ngx_pcre_free_studies(void *data)
+{
+ ngx_list_t *studies = data;
+
+ ngx_uint_t i;
+ ngx_list_part_t *part;
+ ngx_regex_elt_t *elts;
+
+ part = &studies->part;
+ elts = part->elts;
+
+ for (i = 0 ; /* void */ ; i++) {
+
+ if (i >= part->nelts) {
+ if (part->next == NULL) {
+ break;
+ }
+
+ part = part->next;
+ elts = part->elts;
+ i = 0;
+ }
+
+ if (elts[i].regex->extra != NULL) {
+ pcre_free_study(elts[i].regex->extra);
+ }
+ }
+}
+
+#endif
+
+
static ngx_int_t
ngx_regex_module_init(ngx_cycle_t *cycle)
{
@@ -287,12 +325,27 @@

#if (NGX_HAVE_PCRE_JIT)
{
- ngx_regex_conf_t *rcf;
+ ngx_regex_conf_t *rcf;
+ ngx_pool_cleanup_t *cln;

rcf = (ngx_regex_conf_t *) ngx_get_conf(cycle->conf_ctx, ngx_regex_module);

if (rcf->pcre_jit) {
opt = PCRE_STUDY_JIT_COMPILE;
+
+ /*
+ * The PCRE JIT compiler uses mmap for its executable codes, so we
+ * have to explicitly call the pcre_free_study() function to free
+ * this memory.
+ */
+
+ cln = ngx_pool_cleanup_add(cycle->pool, 0);
+ if (cln == NULL) {
+ return NGX_ERROR;
+ }
+
+ cln->handler = ngx_pcre_free_studies;
+ cln->data = ngx_pcre_studies;
}
}
#endif

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

[nginx] svn commit: r4424 - trunk/src/core

Anonymous User 1318 January 30, 2012 07:54AM



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

Online Users

Guests: 231
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