[module dev] PCRE compiled code lost at reload
Maxim Dounin
mdounin at mdounin.ru
Wed Jun 22 13:49:12 UTC 2016
Hello!
On Wed, Jun 22, 2016 at 09:31:12AM +0000, MAGNIEN, Thierry wrote:
> I'm experiencing a strange behavior and I wonder if I'm missing
> something obvious...
>
> I've developed a module and I use shared memory and slab
> allocations to keep data unique across workers and have data
> survive a reload.
>
> Everything works fine except one single thing: PCRE compiled
> codes (ngx_regex_compile_t->regex->code).
>
> To be more precise, at reload, in my module init function, I
> recompile some of the PCRE if they have changed, still using
> shared memory. What I notice is that, just after init module
> function has returned, all dying workers lose PCRE compiled code
> (regex->code = 0), where all new created workers correctly get
> new compiled code.
>
> I tried to use my own pcre_malloc function in order to be sure
> memory is allocated in shared memory (and this *is* the case),
> but without success.
>
> So any help is welcome: does anyone have a clue about why only
> those data are "lost" by dying workers ?
Regex compilation via ngx_regex_compile() uses memory from a pool
provided via ngx_regex_compile_t (rc->pool). This memory will be
freed when a pool will be destroyed. See rc/core/ngx_regex.c for
details.
--
Maxim Dounin
http://nginx.org/
More information about the nginx-devel
mailing list