src/server/safs/cgi.c

changeset 144
4b546c4f25ed
parent 133
87b405d61f64
child 145
1c93281ca4bf
--- a/src/server/safs/cgi.c	Fri Dec 30 19:43:41 2016 +0100
+++ b/src/server/safs/cgi.c	Sat Dec 31 18:05:40 2016 +0100
@@ -97,6 +97,7 @@
             r = netbuf_getbytes(sn->inbuf, buf, 4096);
             if(r <= 0) {
                 // TODO: handleerror
+                cgi_close(&cgip);
                 return REQ_ABORTED; 
             }
             write(cgip.in[1], buf, r);
@@ -104,6 +105,7 @@
         }
     }
     close(cgip.in[1]);
+    cgip.in[1] = -1;
     
     // read from child
     CGIResponseParser *parser = cgi_parser_new(sn, rq);
@@ -142,6 +144,8 @@
             }
         }
     }
+    
+    cgi_close(&cgip);
       
     cgi_parser_free(parser);
     return result;
@@ -196,11 +200,27 @@
     } else {
         // parent  
         close(p->out[1]);
+        p->out[1] = -1;
     }
     
     return REQ_PROCEED;
 }
 
+void cgi_close(CGIProcess *p) {
+    if(p->in[0] != -1) {
+        close(p->in[0]);
+    }
+    if(p->in[1] != -1) {
+        close(p->in[1]);
+    }
+    if(p->out[0] != -1) {
+        close(p->out[0]);
+    }
+    if(p->out[1] != -1) {
+        close(p->out[1]);
+    }
+}
+
 CGIResponseParser* cgi_parser_new(Session *sn, Request *rq) {
     CGIResponseParser* parser = pool_malloc(sn->pool, sizeof(CGIResponseParser));
     parser->sn = sn;

mercurial