311 |
311 |
312 if(handler->debug_finished) { |
312 if(handler->debug_finished) { |
313 log_ereport(LOG_DEBUG, "cgi-send: req: %p debug_finished: 1 cgi_stdout_readevent events: %d", handler->parser->rq, handler->events); |
313 log_ereport(LOG_DEBUG, "cgi-send: req: %p debug_finished: 1 cgi_stdout_readevent events: %d", handler->parser->rq, handler->events); |
314 } |
314 } |
315 |
315 |
316 if(handler->cgi_eof) { |
316 if(handler->cgi_eof || handler->result == REQ_ABORTED) { |
317 // cgi_eof will be set to true by cgi_read_output |
317 // cgi_eof will be set to true by cgi_read_output |
318 // if it is true here, the cgi handling was finished by cgi_writeevent |
318 // if it is true here, the cgi handling was finished by cgi_writeevent |
319 // in that case, cgi_writeevent will finish the request processing |
319 // in that case, cgi_writeevent will finish the request processing |
320 // and nothing needs to be done here |
320 // and nothing needs to be done here |
321 handler->wait_read = FALSE; |
321 handler->wait_read = FALSE; |
356 } |
356 } |
357 |
357 |
358 int cgi_writeevent(EventHandler *ev, Event *event) { |
358 int cgi_writeevent(EventHandler *ev, Event *event) { |
359 CGIHandler *handler = event->cookie; |
359 CGIHandler *handler = event->cookie; |
360 |
360 |
361 if(handler->cgi_eof) { |
361 if(handler->cgi_eof || handler->result == REQ_ABORTED) { |
362 log_ereport(LOG_DEBUG, "cgi-send: req: %p writeevent cgi_eof = TRUE", handler->parser->rq); |
362 log_ereport(LOG_DEBUG, "cgi-send: req: %p writeevent cgi_eof = TRUE result: %d", handler->parser->rq, handler->result); |
363 } |
363 } |
364 |
364 |
365 event->finish = cgi_event_finish; |
365 event->finish = cgi_event_finish; |
366 handler->readev->finish = NULL; |
366 handler->readev->finish = NULL; |
367 CgiIOResult ret = cgi_read_output(handler, ev); |
367 CgiIOResult ret = cgi_read_output(handler, ev); |
580 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: pid: %d", rq, handler->process.pid); |
580 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish: pid: %d", rq, handler->process.pid); |
581 } |
581 } |
582 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); |
582 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); |
583 |
583 |
584 handler->debug_finished = TRUE; |
584 handler->debug_finished = TRUE; |
|
585 if(event->fn != cgi_stderr_readevent) { |
|
586 handler->cgi_eof = TRUE; |
|
587 } |
585 |
588 |
586 if(handler->result == REQ_ABORTED && handler->process.pid != 0 && handler->cgi_kill == 0) { |
589 if(handler->result == REQ_ABORTED && handler->process.pid != 0 && handler->cgi_kill == 0) { |
587 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s pid: %d", handler->path, (int)handler->process.pid); |
590 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s pid: %d", handler->path, (int)handler->process.pid); |
588 if(kill(handler->process.pid, SIGTERM)) { |
591 if(kill(handler->process.pid, SIGTERM)) { |
589 log_ereport(LOG_FAILURE, "cgi-send: pid: %d kill failed: %s", (int)handler->process.pid, strerror(errno)); |
592 log_ereport(LOG_FAILURE, "cgi-send: pid: %d kill failed: %s", (int)handler->process.pid, strerror(errno)); |