Hi,
I am seeing a very strange issue with per-server config processing.
Consider a config directive:
{ "ServerThing",
(CMD_HAND_TYPE) config_server_thing,
NULL,
RSRC_CONF, TAKE1,
"For Testing"
}
I have a struct to hold the per-server configuration (struct srv).
An instance of struct srv gets allocated and initialized by an init
function, and then when Apache sees "ServerThing foo" in httpd.conf,
it calls config_server_thing:
const char *config_server_thing(cmd_parms *cmd, void *m, char *arg) {
}
So far, so good. But here's the problem: In this function, I should
be able to cast the pointer, m, back to the struct srv that was
initialized earlier.
srv_conf = (struct srv *) m;
But after lots of debugging, I find that:
1) The pointer m is not equal to the pointer that was returned
from the initialization function.
2) m does not hold a copy of the data structure that was initialized.
3) And m is also not equal to the value of
ap_get_module_config(cmd->server->module_config, &my_module)
Finally, as a work-around, I decided to use:
srv_conf = (struct srv *) ap_get_module_config(cmd->server-
>module_config, &my_module);
instead of:
srv_conf = (struct srv *) m;
So, what's the problem? Well...
* It's not a "merge" problem. (I implemented a merging function
just in case, but that never gets called).
* It's not the vhost issue described on pg. 574 of "Writing Apache
Modules with Perl and C" where your init function might never get
called (the init function *is* called, and there are no virtual hosts
at all in this config file)
* It's not a bug with one particular release of Apache -- I see the
same behavior in both 1.3.33 and 2.2.3.
* I can't find any obvious problem with my code (all of my per-
directory config stuff works perfectly).
So, I wonder: is my work-around safe?
Should I file a bug?
Is there someone in particular I should ask for help?
Thanks,
JD