[dev] can't add timer in a module postconf init routine.

Manlio Perillo manlio_perillo at libero.it
Tue Oct 9 01:42:21 MSD 2007


Brice Figureau ha scritto:
> On Mon, October 8, 2007 19:43, Manlio Perillo wrote:
>> Brice Figureau ha scritto:
>>> Hi,
>>>
>>> I tried to ngx_add_timer the postconfiguration init callback of a
>>> module,
>>> but it doesn't work because ngx_event_timer_init has not yet been
>>> called.
>>>
>>> Is it possible to call ngx_event_timer_init _before_ the configuration
>>> phase ends ?
>>>
>>> My only other alternative is to lazily add my timer in the handler
>>> callback if not set yet (that works fine for sure, but I'm not sure
>>> there
>>> won't be race which could create more timer than I need if there are
>>> multiple workers).
>>>
>> What do you need to do with the timer?
> 
> I need to run cleanup code every 30s or minute per main configuration
> directive of my module.
> 

Ok.
This is interesting, I may need this for mod_wsgi.

>> Your code in configuration callbacks will be inherited by all the worker
>> processes
> 
> Yes, that's why I said I fear there is a race if the timer is added
> _after_ the configuration takes place, like in my handler (there could be
> a time frame between the moment I test the timer is not set and the moment
> I add the timer).
> 

I don't think this is possible, since nginx does not uses preemption.

>> As an example you can use the init process callback in your ngx_module_t
>> definition.
> 
> Yes I've seen. I'll try it to see if that works.
> 
> Is the init process callback called _after_ the configuration takes place
> and after ngx_event_tiner_init ?

It is called after configuration, and I think that it is called after 
the event module has been initialized.

> The other problem is that I need to get my module configuration in this
> callback, which I'm not sure it is possible.
> 

It should be possible with  ngx_get_conf:
ngx_get_conf(cycle->conf_ctx, your_module);


However keep in mind that you will have a timer for each worker process, 
so the cleanup code will be executed n times, unless you use shared 
memory to prevent it.

> Thanks,



Regards  Manlio Perillo





More information about the nginx mailing list