You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Jeff Trawick <tr...@gmail.com> on 2009/03/24 22:45:32 UTC
current status of loadable MPM changes
http://people.apache.org/~trawick/loadable_mpms.txt
(you'll find additional stuff I forgot/didn't realize before long)
something I'm in a relative hurry to get feedback on is this part:
2. retain data
How can MPMs retain data across unload of the DSO?
s->process->server_pool userdata
won't work as-is because there's no server_rec in the pre_config hook.
Proposal: Add ap_set_retained_data(key, value),
ap_get_retained_data(key) APIs
(implementation detail: it will set/get userdata on pglobal)
Although not necessary, provide ap_get_config_count()
(better name!) to
indicate how many passes of config have completed. (The
interface could be
a global variable, but some third-party module would
inevitably clear it.)
Re: current status of loadable MPM changes
Posted by Jeff Trawick <tr...@gmail.com>.
On Wed, Mar 25, 2009 at 8:53 PM, Nick Kew <ni...@webthing.com> wrote:
>
> On 24 Mar 2009, at 21:45, Jeff Trawick wrote:
>
> something I'm in a relative hurry to get feedback on is this part:
>>
>> 2. retain data
>>
>> How can MPMs retain data across unload of the DSO?
>> s->process->server_pool userdata
>> won't work as-is because there's no server_rec in the pre_config hook.
>>
>
> Is there a need for an API here? As opposed to the MPM working with
> its own file-scope static variables, for instance?
>
File-scope static variables don't work for DSOs (for data retained across
unload/reload) since the variables are re-instantiated at reload.
That led to the following idiom in quite a few modules:
const char *userdata_key = "rewrite_init_module";
apr_pool_userdata_get(&data, userdata_key, s->process->pool);
if (!data) {
first_time = 1;
apr_pool_userdata_set((const void *)1, userdata_key,
apr_pool_cleanup_null, s->process->pool);
}
(This is a simple use with just a flag.)
That's more gory than it needs to be, and MPMs needed this capability in the
pre-config hook, when there is no s->process->pool; hence the need for a
change.
>
>
>> Proposal: Add ap_set_retained_data(key, value),
>> ap_get_retained_data(key) APIs
>> (implementation detail: it will set/get userdata on pglobal)
>>
>> Although not necessary, provide ap_get_config_count()
>> (better name!) to
>> indicate how many passes of config have completed. (The
>> interface could be
>> a global variable, but some third-party module would
>> inevitably clear it.)
>>
>
> Looks fine, if there is indeed a need for it.
Cool... Note that the final (working) interface is a bit different, where
ap_set_retained_data takes key + length, allocates the space, and returns
the address to the caller.
Re: current status of loadable MPM changes
Posted by Nick Kew <ni...@webthing.com>.
On 24 Mar 2009, at 21:45, Jeff Trawick wrote:
> something I'm in a relative hurry to get feedback on is this part:
>
> 2. retain data
>
> How can MPMs retain data across unload of the DSO?
> s->process->server_pool userdata
> won't work as-is because there's no server_rec in the pre_config
> hook.
Is there a need for an API here? As opposed to the MPM working with
its own file-scope static variables, for instance?
>
> Proposal: Add ap_set_retained_data(key, value),
> ap_get_retained_data(key) APIs
> (implementation detail: it will set/get userdata on
> pglobal)
>
> Although not necessary, provide ap_get_config_count()
> (better name!) to
> indicate how many passes of config have completed. (The
> interface could be
> a global variable, but some third-party module would
> inevitably clear it.)
Looks fine, if there is indeed a need for it.
--
Nick Kew