You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modules-dev@httpd.apache.org by Rui Hu <tc...@gmail.com> on 2012/03/02 16:44:39 UTC

one problem about MPM worker

hi,

My apache is running in worker MPM mode. And I wrote a module which uses
ap_get_module_conf and ap_set_module_conf to get & set core_module's data
once a request comes. So I am worried about following three potential
problems.

1. Does every request have a copy of core_module's configuration data?
2. Is there any built-in synchronization mechanism existing in these two
functions?
3. Should I add locking mechanism myself?

Thanks!

Rui Hu

-- 
Best regards,

Rui Hu
----------------------------------------------------------------------------------------
State Key Laboratory of Networking & Switching Technology
Beijing University of Posts and Telecommunications(BUPT)
MSN: tchrbupt@gmail.com
-----------------------------------------------------------------------------------------

Re: one problem about MPM worker

Posted by Sorin Manolache <so...@gmail.com>.
On 2012-03-02 16:44, Rui Hu wrote:
> hi,
>
> My apache is running in worker MPM mode. And I wrote a module which uses
> ap_get_module_conf and ap_set_module_conf to get&  set core_module's data
> once a request comes. So I am worried about following three potential
> problems.
>
> 1. Does every request have a copy of core_module's configuration data?

No. They have pointers to configuration objects.

> 2. Is there any built-in synchronization mechanism existing in these two
> functions?

No.

> 3. Should I add locking mechanism myself?

If I answer strictly to the question, I would say No. ap_set_module_conf 
does something like array_of_pointers_to_conf_data_objects[module_index] 
= address_of_conf_object.

So it is an assignment in an array. Normally this is done atomically.

If I digress, I would say that I am not sure your approach is safe.

First, configurations more often are read-only. Apache loads them at 
startup and they do not change during the life-time of the server.

If you want to use request-specific data, you have other means, such as 
r->request_config, r->notes, r->subprocess_env.

Second, it is good practice that modules create and use their own 
configuration objects and do not change de configuration objects of 
other modules.

Sorin