[dev] synchronous write

Manlio Perillo manlio_perillo at libero.it
Tue Oct 23 13:29:41 MSD 2007


Igor Sysoev ha scritto:
> [...]
> 
> The loop should be:
> 
>     do {
>        rc = ngx_http_output_filter(self->r, &out);
> 
>        self->r->connection->write->ready = 1;
> 
>     } while (rc == NGX_AGAIN);
> 
> In usual processing event->ready is set by event module (kqueue/epoll/etc).
> 

Ok, this solves the problem, thanks!
Now ngx_http_output_filter returns NGX_ERROR when the client closes the 
connection.

There is only one minor problem.
When I send a SIGINT signal to nginx during a blocking write operation, 
the termination is not "clean":

  [notice] 12546#0: using the "epoll" event method
  [notice] 12546#0: nginx/0.5.31
  [notice] 12546#0: built by gcc 4.1.2 20061115 (prerelease) (Debian 
4.1.1-21)
  [notice] 12546#0: OS: Linux 2.6.18-5-686
  [notice] 12546#0: sysctl(KERN_RTSIGMAX): 0
  [notice] 12546#0: getrlimit(RLIMIT_NOFILE): 1024:1024
  [notice] 12546#0: start worker processes
  [notice] 12546#0: start worker process 12548
  [notice] 12546#0: start worker process 12549
  [debug] 12548#0: *1 wsgi_handler
  [debug] 12548#0: *1 mod_wsgi: Loading WSGI script 
'/usr/local/nginx/nginx-write.py'
  [debug] 12548#0: *1 mod_wsgi: start_response called
  [debug] 12548#0: *1 mod_wsgi: sent headers, 0
  [debug] 12548#0: *1 mod_wsgi: write called 128000000 0
  [notice] 12549#0: signal 2 (SIGINT) received, exiting
  [info] 12549#0: epoll_wait() failed (4: Interrupted system call)
  [notice] 12549#0: exiting
  [notice] 12548#0: signal 2 (SIGINT) received, exiting
  [notice] 12546#0: signal 17 (SIGCHLD) received
  [notice] 12546#0: worker process 12549 exited with code 0
  [notice] 12546#0: signal 2 (SIGINT) received, exiting
  [notice] 12546#0: signal 29 (SIGIO) received
  [notice] 12546#0: signal 14 (SIGALRM) received
  [notice] 12546#0: signal 14 (SIGALRM) received
  [notice] 12546#0: signal 14 (SIGALRM) received
  [notice] 12546#0: signal 14 (SIGALRM) received
  [notice] 12546#0: signal 17 (SIGCHLD) received
  [alert] 12546#0: worker process 12548 exited on signal 9
  [notice] 12546#0: exit


Not a big problem, however.



Manlio Perillo





More information about the nginx mailing list