323 return 0; |
323 return 0; |
324 } |
324 } |
325 |
325 |
326 event->finish = cgi_event_finish; |
326 event->finish = cgi_event_finish; |
327 handler->writeev->finish = NULL; |
327 handler->writeev->finish = NULL; |
328 CgiIOResult ret = cgi_read_output(handler, ev); |
328 CgiIOResult ret = cgi_read_output(handler, ev, "readevent"); |
329 switch(ret) { |
329 switch(ret) { |
330 case CGI_IO_COMPLETE: { |
330 case CGI_IO_COMPLETE: { |
331 break; |
331 break; |
332 } |
332 } |
333 case CGI_IO_NEED_READ: { |
333 case CGI_IO_NEED_READ: { |
362 log_ereport(LOG_DEBUG, "cgi-send: req: %p writeevent cgi_eof = TRUE result: %d", handler->parser->rq, handler->result); |
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, "writeevent"); |
368 switch(ret) { |
368 switch(ret) { |
369 case CGI_IO_COMPLETE: { |
369 case CGI_IO_COMPLETE: { |
370 break; |
370 break; |
371 } |
371 } |
372 case CGI_IO_NEED_READ: { |
372 case CGI_IO_NEED_READ: { |
384 return 0; |
384 return 0; |
385 } |
385 } |
386 |
386 |
387 |
387 |
388 |
388 |
389 CgiIOResult cgi_read_output(CGIHandler *handler, EventHandler *ev) { |
389 CgiIOResult cgi_read_output(CGIHandler *handler, EventHandler *ev, const char *debug_log) { |
390 CGIResponseParser *parser = handler->parser; |
390 CGIResponseParser *parser = handler->parser; |
391 Session *sn = parser->sn; |
391 Session *sn = parser->sn; |
392 Request *rq = parser->rq; |
392 Request *rq = parser->rq; |
393 |
393 |
394 if(handler->result == REQ_ABORTED) { |
394 if(handler->result == REQ_ABORTED) { |
471 } |
471 } |
472 if(r < 0 && errno == EWOULDBLOCK) { |
472 if(r < 0 && errno == EWOULDBLOCK) { |
473 return CGI_IO_NEED_READ; |
473 return CGI_IO_NEED_READ; |
474 } |
474 } |
475 handler->cgi_eof = TRUE; |
475 handler->cgi_eof = TRUE; |
|
476 log_ereport(LOG_DEBUG, "cgi-send: rq: %p pid: %d set cgi_eof : %s", rq, handler->process.pid, debug_log); |
476 return ret; |
477 return ret; |
477 } |
478 } |
478 |
479 |
479 int cgi_stderr_readevent(EventHandler *ev, Event *event) { |
480 int cgi_stderr_readevent(EventHandler *ev, Event *event) { |
480 CGIHandler *handler = event->cookie; |
481 CGIHandler *handler = event->cookie; |
581 } |
582 } |
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 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 |
584 |
584 handler->debug_finished = TRUE; |
585 handler->debug_finished = TRUE; |
585 if(event->fn != cgi_stderr_readevent) { |
586 if(event->fn != cgi_stderr_readevent) { |
|
587 log_ereport(LOG_DEBUG, "cgi-send: req: %p finish set cgi_eof: %s", rq, event_fn); |
586 handler->cgi_eof = TRUE; |
588 handler->cgi_eof = TRUE; |
587 } |
589 } |
588 |
590 |
589 if(handler->result == REQ_ABORTED && handler->process.pid != 0 && handler->cgi_kill == 0) { |
591 if(handler->result == REQ_ABORTED && handler->process.pid != 0 && handler->cgi_kill == 0) { |
590 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s pid: %d", handler->path, (int)handler->process.pid); |
592 log_ereport(LOG_FAILURE, "cgi-send: kill script: %s pid: %d", handler->path, (int)handler->process.pid); |