src/server/safs/cgi.c

changeset 532
d8212d4f24f2
parent 530
1e117b5d6710
child 534
bf62eddbdb9b
equal deleted inserted replaced
531:9b15b1f72bef 532:d8212d4f24f2
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));

mercurial