325 } |
325 } |
326 if(event_pollout(ev, handler->parser->sn->csd, handler->writeev)) { |
326 if(event_pollout(ev, handler->parser->sn->csd, handler->writeev)) { |
327 handler->result = REQ_ABORTED; |
327 handler->result = REQ_ABORTED; |
328 } else { |
328 } else { |
329 handler->poll_out = TRUE; |
329 handler->poll_out = TRUE; |
|
330 handler->events++; |
330 log_ereport(LOG_DEBUG, "cgi-send: req: %p enable poll out", handler->parser->rq); |
331 log_ereport(LOG_DEBUG, "cgi-send: req: %p enable poll out", handler->parser->rq); |
331 return 1; // keep readevent active |
332 return 1; // keep readevent active |
332 } |
333 } |
333 } |
334 } |
334 case CGI_IO_ERROR: { |
335 case CGI_IO_ERROR: { |
557 } else if(event->fn == cgi_stderr_readevent) { |
558 } else if(event->fn == cgi_stderr_readevent) { |
558 event_fn = "stderr"; |
559 event_fn = "stderr"; |
559 } else if(event->fn == cgi_writeevent) { |
560 } else if(event->fn == cgi_writeevent) { |
560 event_fn = "httpout"; |
561 event_fn = "httpout"; |
561 } |
562 } |
562 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: event: %d pollout: %d cgi_eof: %d fn: %s", rq, handler->events, handler->poll_out, handler->cgi_eof, event_fn); |
563 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: event: %d pollout: %d wait_read: %d cgi_eof: %d fn: %s", rq, handler->events, handler->poll_out, handler->wait_read, handler->cgi_eof, event_fn); |
|
564 |
|
565 if(handler->poll_out) { |
|
566 // write event registered, however it will not be activated anymore |
|
567 // we can safely remove the event |
|
568 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: remove-poll write", rq); |
|
569 if(event_removepoll(ev, sn->csd)) { |
|
570 log_ereport(LOG_FAILURE, "cgi_event_finish: event_removepoll: %s", strerror(errno)); |
|
571 } |
|
572 handler->events--; |
|
573 handler->poll_out = FALSE; |
|
574 } |
563 |
575 |
564 if(--handler->events > 0) { |
576 if(--handler->events > 0) { |
565 return 0; |
577 return 0; |
566 } |
578 } |
567 |
579 |
586 } else { |
598 } else { |
587 return 0; |
599 return 0; |
588 } |
600 } |
589 } |
601 } |
590 */ |
602 */ |
591 if(handler->poll_out) { |
|
592 // write event registered, however it will not be activated anymore |
|
593 // we can safely remove the event |
|
594 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: remove-poll write", rq); |
|
595 if(event_removepoll(ev, sn->csd)) { |
|
596 log_ereport(LOG_FAILURE, "cgi_event_finish: event_removepoll: %s", strerror(errno)); |
|
597 } |
|
598 } |
|
599 |
603 |
600 if(handler->result == REQ_ABORTED && handler->process.pid != 0) { |
604 if(handler->result == REQ_ABORTED && handler->process.pid != 0) { |
601 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s", handler->path); |
605 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s", handler->path); |
602 killpg(handler->process.pid, SIGTERM); |
606 killpg(handler->process.pid, SIGTERM); |
603 } |
607 } |