P.S. Насчет geoip... а как мне можно освобождать память, которую он
выделяет (только сейчас в голову пришло, что он тоже вполне имеет право
на это)?
Посмотрел - точно - там тонны маллоков.... Куда его запихать - этот
инициализарующий вызов, чтобы потом можно было результаты использовать в
баннерофильтре (т.к. я не нашел утверждений об обратном, считаем, что он
не thread-safe)?
Инициализирующий вызов - куда угодно. После этого нужно привязать
деинициализацию к пулу cf->pool с помощью ngx_pool_cleanup_add()
на примере ngx_pool_cleanup_file().
Хочу проверить, правильно ли понял...
Итак, если у нас есть в create_conf у модуля какой-то вызов внешней
процедуры, возвращающей нам "SomeType* x" и мы должны вызывать SomeFree(x)
при обновлении конфигурации через -HUP, то делать нужно так (на примере
GeoIP):
Не совсем. Вот такой порядок гарантирует, что bcf->gi будет освобождён:
cln = ngx_pool_cleanup_add(cf->pool, 0);
bcf->gi = GeoIP_open_type(GEOIP_CITY_EDITION_REV1, GEOIP_STANDARD);
cln->handler = ngx_pool_cleanup_geoip;
cln->data = bcf->gi;
Игорь Сысоев
http://sysoev.ru