Welcome! Log In Create A New Profile

Advanced

Newbie: Shmem constructor not being called after reload

Acácio Centeno
July 16, 2015 06:08PM
Hello,

On Emiller's guide to Nginx [1] it's stated that the shared memory
constructor would receive a previously allocated data pointer as a second
parameter upon a restart, so the constructor could reuse this area and
avoid losing the data. I've searched the forum archives using [2] and found
the thread [3], that stated this behavior too.

I've written a module that creates a shared memory area on a command
initialization (a location configuration) and the constructor is properly
called when Nginx starts. The area is created and I can use it effectively.
But when I issue a "nginx -s reload", the constructor is not called at all,
and I loose the data that was previously on the shared memory.

I'm wondering what I'm doing wrong. Is it because I'm calling
ngx_shared_memory_add on a location configuration?

This is what I'm doing:

static ngx_command_t ngx_http_mod_tutorial_commands[] = {
{
ngx_string("tutorial"),
NGX_HTTP_LOC_CONF | NGX_CONF_NOARGS,
ngx_http_mod_tutorial_enable,
0,
0,
NULL
},
....

static char *
ngx_http_mod_tutorial_enable(ngx_conf_t *cf, ngx_command_t *cmd, void *_)
{
....
conf->shm_zone = ngx_shared_memory_add(
cf, shm_name, 2 * ngx_pagesize, &ngx_http_mod_tutorial_module);
if (!conf->shm_zone) {
ngx_conf_log_error(NGX_LOG_ERR, cf, 0, "Could not create shm.");
return NGX_CONF_ERROR;
}
conf->shm_zone->init = ngx_http_mod_tutorial_init_shm_zone;
....

static ngx_int_t
ngx_http_mod_tutorial_init_shm_zone(ngx_shm_zone_t *shm_zone, void *data)
{
....
fprintf(stderr, "SHM_ZONE %p\n", data);

if (data) {
shm_zone->data = data;
return NGX_OK;
}
....


The message to stderr is printed when Nginx starts, but not after a reload,
that's why I know that the constructor is not being called again. Also, I
have a counter on the shared area and it's value is reset after a reload.

Any thoughts?


[1] http://www.evanmiller.org/nginx-modules-guide-advanced.html#shm
[2]
http://forum.nginx.org/search.php?29,search=shared+memory,author=,page=1,match_type=ALL,match_dates=0,match_forum=29,match_threads=0
[3] http://forum.nginx.org/read.php?29,229836,229836#msg-229836

Best regards,
Acácio Centeno
Software Engineering
Azion Technologies
Porto Alegre, Brasil +55 51 3012 3005 | +55 51 8118 9947
Miami, USA +1 305 704 8816

Quaisquer informações contidas neste e-mail e anexos podem ser
confidenciais e privilegiadas, protegidas por sigilo legal. Qualquer forma
de utilização deste documento depende de autorização do emissor, sujeito as
penalidades cabíveis.

Any information in this e-mail and attachments may be confidential and
privileged, protected by legal confidentiality. The use of this document
require authorization by the issuer, subject to penalties.
_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

Newbie: Shmem constructor not being called after reload

Acácio Centeno 738 July 16, 2015 06:08PM

Re: Newbie: Shmem constructor not being called after reload

Maxim Dounin 387 July 16, 2015 06:32PM



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

Online Users

BMX
Guests: 161
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