Pb with module initialization
vshebordaev at mail.ru
Fri Aug 17 11:32:56 UTC 2012
2012/8/17 MAGNIEN, Thierry <thierry.magnien at sfr.com>:
> I am currently writing a module for my own needs and am facing a problem : at startup, I need to load into shared memory some content from a MySQL database.
> Shared memory size and mysql parameters (hostname, user, password) are in the main config section.
> My problem is I don't know where to insert the code so that it works :
> - I initialize shared memory in postconfiguration, but I can't load MySQl data here because the shm is not ready yet,
> - I tried to load MySQL data in init module function but then I can't access my module configuration directives (ngx_get_conf returns NULL).
> Does anybody have an idea how I could achieve this ?
A shared memory zone has a constructor, namely, init() method in
ngx_shm_zone_t. This method is invoked by ngx_init_cycle() when the
configuration is already processed and the shared memory zones are
about to be (re)initialized, so I guess you can accees both your
directives and the actual shm zone data from there. See file cache
initialization routine ngx_http_file_cache_init() in
src/http/ngx_http_file_cache.c for an example.
Hope it helps.
More information about the nginx-devel