我写了这样的模块代码:
static void *example_create_server_config(apr_pool_t *p, server_rec *s)
{
syslog(LOG_ERR, "create_server_config");
// create my handler
// my_handler_t *handler = (my_handler_t *)apr_palloc(pool, sizeof(my_handler_t));
return NULL;
}
/* Dispatch list for API hooks */
module AP_MODULE_DECLARE_DATA example_module = {
STANDARD20_MODULE_STUFF,
NULL, /* create per-dir config structures */
NULL, /* merge per-dir config structures */
example_create_server_config, /* create per-server config structures */
NULL, /* merge per-server config structures */
example_cmds, /* table of config file commands */
example_register_hooks /* register hooks */
};
当我重启Apache时,/var/log/syslog
包含这个:
Jan 31 14:46:49 su02 apache2: create_server_config
Jan 31 14:46:49 su02 apache2: create_server_config
Jan 31 14:46:49 su02 apache2: child_init
为什么create_server_config
函数被调用两次?
我在这个函数中malloc了一些全局变量。这样安全吗?
答案 0 :(得分:1)
使用您在此函数内部收到的apr_pool_t指针获取内存是完全安全的。此外,对于httpd.conf文件中的每个服务器/主机配置,将调用此函数一次,这就是为什么您看到对此函数的多次调用。例如,根服务器配置和一个配置部分将使该函数被调用两次。
typedef struct
{
int value;
} my_srv_cfg;
static void *example_create_server_config(apr_pool_t *pool, server_rec *s)
{
my_srv_cfg *new = apr_pcalloc(pool, sizeof (*new));
new->value = 100;
return new;
}