src/server/safs/cgi.c

changeset 498
0d80f8a2b29f
parent 497
8827517054ec
child 499
ef77854a91f3
--- a/src/server/safs/cgi.c	Wed May 31 19:39:10 2023 +0200
+++ b/src/server/safs/cgi.c	Sun Jun 04 20:09:18 2023 +0200
@@ -179,7 +179,7 @@
     Event *writeev = pool_malloc(sn->pool, sizeof(Event));
     ZERO(writeev, sizeof(Event));
     writeev->cookie = handler;
-    // TODO: fn
+    
     
     handler->writeev = writeev;
     handler->stderrev = stderr_readev;
@@ -256,12 +256,13 @@
             if(!handler->poll_out) {
                 if(event_pollout(ev, sn->csd, handler->writeev)) {
                     handler->result = REQ_ABORTED;
-                    return 1;
+                    return 0;
                 }
                 handler->poll_out = TRUE;
             }
         } else {
             handler->result = REQ_ABORTED;
+            log_ereport(LOG_FAILURE, "cgi_try_write: %s", strerror(errno));
         }
         return 1;
     }
@@ -292,8 +293,12 @@
     // try to flush handler->writebuf
     // if writebuf is empty, this does nothing and returns 0
     if(cgi_try_write_flush(handler, sn)) {
-        log_ereport(LOG_DEBUG, "cgi-send: req: %p write failed: abort", rq);
-        return handler->result == REQ_ABORTED ? 0 : 1;
+        if(handler->result == REQ_ABORTED) {
+            log_ereport(LOG_DEBUG, "cgi-send: req: %p write failed: abort", rq);
+            return 0;
+        } else {
+            return 1;
+        }
     }
     
     char buf[4096]; // I/O buffer
@@ -462,9 +467,12 @@
     Request *rq = parser->rq;
       
     log_ereport(LOG_DEBUG, "cgi-send: req: %p event-finish", rq);
-    if(handler->result == REQ_ABORTED) {
+    if(handler->result == REQ_ABORTED && handler->process.pid != 0) {
         log_ereport(LOG_FAILURE, "cgi-send: kill script: %s", handler->path);
-        kill(handler->process.pid, SIGKILL);
+        
+        killpg(handler->process.pid, SIGTERM);
+
+        handler->process.pid = 0;
     }
     
     if(!handler->stderr_finished) {

mercurial