1

我这样编写模块代码:

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 了一些全局变量。这安全吗?

4

1 回答 1

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; 
}
于 2013-02-04T05:58:07.500 回答