Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Модуль на C++ - во зможно?
On Fri, Mar 07, 2008 at 07:55:48AM -0800, Sergey S. wrote:
> Еще одна засада возникла =) В модуле используется map<string, string> для
> хранения конфигурации, и средствами nginx'а под нее память выделяется как-то
> неправильно. При обращении к контейнеру в обработчике для директив nginx
> падает в сегфолт.
>
> Поэтому память приходится выделять так:
>
> static void* ngx_http_test_create_loc_conf(ngx_conf_t *cf)
> {
> ngx_http_test_loc_conf_t *conf = new ngx_http_test_loc_conf_t; // где
> ngx_http_test_loc_conf_t == map<string, string>
>
> return conf;
> }
>
> Вопрос: как ее правильно освобождать? Сейчас память освобождается в коллбеке
> (но есть подозрения, что могут быть последствия):
>
> void ngx_http_test_exit_process(ngx_cycle_t* cycle)
> {
> delete g_conf;
> }
>
> где g_conf - глобальный указатель на map<string,string>.
Неправильно.
Нужно делать регистрировать cleanup
cln = ngx_pool_cleanup_add(cf->pool, 0);
if (cln == NULL) {
return NULL;
}
cln->handler = ngx_test_module_cleanup;
cln->data = conf;
Который вызовется при разрушении pool'а.
--
Игорь Сысоев
http://sysoev.ru
|