Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Инициализация списка ngx_posted_events
30.08.2013 14:15, Maxim Dounin пишет:
Hello!
On Fri, Aug 30, 2013 at 12:55:01PM +0400, titkovdmitry@xxxxxxxxx wrote:
30.08.2013 12:42, Maxim Dounin пишет:
Hello!
On Fri, Aug 30, 2013 at 10:06:48AM +0400, titkovdmitry@xxxxxxxxx wrote:
Здравствуйте!
Я разрабатываю модуль к серверу nginx который позволяет формировать
некий текстовый ответ на http запрос.
Процесс формирования ответа полностью отвязан от nginx и я хотел бы
вынести этот процесс в thread pool.
Мне кажется я разобрался как это можно сделать но у меня остается
один вопрос.
Реализовать я бы хотел это следующим образом, когда вызывается
обработчик запроса модуля я копирую все необходимые параметры в
структуру и передаю её на выполнение в thread pool.
Так же я сохраняю этот запрос в списке подобном ngx_posted_events. и
устанавливаю атомарный флаг готовности ответа.
В nginx в метод ngx_process_events_and_timers добавлю код, который
проверит список с запросами и те у которых готов ответ на отправку
вызовет соответственно
ngx_http_send_header(r) и ngx_http_output_filter(r, out);
Дак вот у меня есть непонимание, где в коде nginx обнуляется
ngx_posted_events ? Всё перерыл, не могу найти этот момент. Буду
благодарен за помощь.
Обработкой posted-событий занимается ngx_event_process_posted(),
и там же обработанные события из очереди удаляются.
Я нашел где они удаляются. И мне понятен механизм работы с ними.
Вопрос состоит в том где эта переменная инициализируется. Это
указатель, в методе ngx_locked_post_event мы обращаемся к полям
структуры которая должна находится по этому указателю. Дак вот где
при старте сервера ей присвается начальное значение ? т.е должен
быть код инициализации, типа ngx_posted_events = init_ev;
Это глобальная переменная, так что она устанавливается в NULL
автоматически. Подробности в C99, 6.7.8 Initialization, абзац 10:
: ... If an object that has static storage duration is
: not initialized explicitly, then:
:
: ? if it has pointer type, it is initialized to a null pointer;
Понял. Спасибо огромное. И извиняюсь за получается глупый вопрос. Сам на
C++ пишу и этого не знал. Ещё раз спасибо!
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru
|