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