Модуль на C++ - возможно?

Igor Sysoev is at rambler-co.ru
Sat Mar 8 19:35:43 MSK 2008


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





More information about the nginx-ru mailing list