[module dev] PCRE compiled code lost at reload

Maxim Dounin mdounin at mdounin.ru
Wed Jun 22 13:49:12 UTC 2016


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 

Maxim Dounin

More information about the nginx-devel mailing list