Sending a notification to the main nginx thread
Maxim Dounin
mdounin at mdounin.ru
Wed Oct 6 13:11:52 UTC 2021
Hello!
On Tue, Oct 05, 2021 at 02:04:14PM +0000, Eran Kornblau wrote:
> Hi all,
>
> I’m planning a module in which I want to send a notification from a side thread to the main nginx thread.
> I checked the implementation of the thread pool module, and saw that it uses ngx_notify for that.
> But, checking how that function is implemented (checked epoll), I saw that it can’t really be used for any other purpose…
> If I send my function to ngx_notify, it will overwrite the thread pool handler, and can lead to race conditions…
>
> Googling for this problem, I saw this old patch –
> https://mailman.nginx.org/pipermail/nginx-devel/2016-August/008679.html
> which didn’t get any replies…
>
> Was wondering – is there some alternative solution for what I’m trying to do?
> Will you consider applying this/some other patch to address this issue?
First of all, you may want to take a look at this warning in the
development guide:
http://nginx.org/en/docs/dev/development_guide.html#threads_pitfalls
Quoting it here:
It is recommended to avoid using threads in nginx because it will definitely
break things: most nginx functions are not thread-safe. It is expected that a
thread will be executing only system calls and thread-safe library functions.
If you need to run some code that is not related to client request processing,
the proper way is to schedule a timer in the init_process module handler and
perform required actions in timer handler. Internally nginx makes use of
threads to boost IO-related operations, but this is a special case with a lot
of limitations.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx-devel
mailing list