upstream reinit (API, Си)
rba
nginx-forum на forum.nginx.org
Пн Май 30 05:10:05 UTC 2016
Здравствуйте, помогите пожалуйста разобраться...
Написал модуль, но т.к. не до конца понимаю некоторые механизмы nginx, после
смены версии nginx, зависимостей и системы всё разумеется перестало
работать.
Просьба в ngx_postgres не указывать, смотрел, там вроде несколько по
другому.
Подозреваю кусок кода которые был переписан со следующего блокирующего
образца:
do {
status = PQconnectPoll(conn);
} while(status != PGRES_POLLING_FAILED && status != PGRES_POLLING_OK);
О том как было переписано:
Комментарий об порядке вызовов
https://github.com/AntonRiab/ngx_pgcopy/blob/master/ngx_http_pgcopy_module.c#L482
Лог вызовов функций
https://github.com/AntonRiab/ngx_pgcopy/blob/master/reinit.log.xml
Правильно ли я понимаю: upstream_init из reinit уходит в глубокую рекурсию,
переполняет стек и поэтому вываливается в segfault?
Куда корректно переместить повторные вызовы чтоб не уходить в рекурсию?
Или есть способ по другому вызвать reinit?
При том что таймер(pgcopy_PQconnectPoll_delay) почему то повторно не
вызывается(даже после повторной установки).
Есть подозрение, что будет работать если вынести повторые вызовы в
r->upstream->read_event_handler/write_event_handle, но тогда роль
access_handler выпадает.
Posted at Nginx Forum: https://forum.nginx.org/read.php?21,267216,267216#msg-267216
Подробная информация о списке рассылки nginx-ru