Re: патч для nginx/win32
Maxim Dounin
mdounin at mdounin.ru
Thu Mar 28 16:20:28 UTC 2013
Hello!
On Thu, Mar 28, 2013 at 06:03:05PM +0600, Илья Шипицин wrote:
> Добрый день!
>
> поправил 0 --> TRUE в WaitForMultipleObjects, чтобы дождаться
> завершения всех потомков, патч:
>
> --- src/os/win32/ngx_process_cycle.c.orig 2013-03-27
> 09:53:48.000000000 +0600
> +++ src/os/win32/ngx_process_cycle.c 2013-03-28 17:58:49.000000000 +0600
> @@ -303,7 +303,10 @@
> ngx_console_handler(u_long type)
> {
> char *msg;
> -
> + ngx_int_t n;
> + u_long nev, timeout, ev;
> + HANDLE events[MAXIMUM_WAIT_OBJECTS];
> +
> switch (type) {
>
> case CTRL_C_EVENT:
> @@ -337,6 +340,18 @@
> "SetEvent(\"%s\") failed", ngx_stop_event_name);
> }
>
> + nev = 0;
> + for (n = 0; n < ngx_last_process; n++) {
> + if (ngx_processes[n].handle) {
> + events[nev++] = ngx_processes[n].handle;
> + }
> + }
> +
> + if(nev != 0){
> + timeout = INFINITE;
> + ev = WaitForMultipleObjects(nev, events, TRUE, timeout);
> + }
> +
> return 1;
> }
Насколько я понимаю, так может быть больно, если основной тред
мастера таки успеет закрыть event'ы раньше, чем мы их
попытаемся использовать.
Я бы строил нормальную синхронизацию именно с завершением
основного треда мастера (а тот, в свою очередь, пусть дожидается
всех остальных - как он, собственно, и сейчас делает).
--
Maxim Dounin
http://nginx.org/en/donation.html
Подробная информация о списке рассылки nginx-ru