Вы можете использовать ловушку child_init для инициализации ресурса, который будет длиться дольше, чем запрос или соединение.
typedef struct {
apr_pool_t *pool;
apr_hash_t *hash;
} my_server_config;
static void my_child_init(apr_pool_t *p, server_rec *s)
{
my_server_config cfg = ap_get_module_config(s->module_config, &my_module);
/* Create sub-pool: ap_pool_create(&cfg->pool, p); */
/* Create hash: cfg->hash = ap_hash_make(cfg->pool); */
}
static void my_register_hooks(apr_pool_t *p)
{
ap_hook_child_init(my_child_init, NULL, NULL, APR_HOOK_MIDDLE);
}
module AP_MODULE_DECLARE_DATA my_module =
{
STANDARD20_MODULE_STUFF,
NULL, /* per-directory config creator */
NULL, /* dir config merger */
NULL, /* server config creator */
NULL, /* server config merger */
NULL, /* command table */
my_register_hooks, /* set up other request processing hooks */
};
Дочерняя инициализация init будет вызвана до того, как apache перейдет в рабочий режим или до того, как потоки будут созданы в многопоточном MPM. Пул, переданный в функцию my_child_init, должен быть пулом процесса.
Для лучшего примера вы должны скачать исходный код apache и проверить файл modules / экспериментальный / mod_example.c.