extra argument for FCGX_Free
skimo [Fri, 22 Jun 2001 13:17:18 +0000 (13:17 +0000)]
include/fcgiapp.h
libfcgi/fcgiapp.c
perl/FCGI.XL

index 2d49152..cea1711 100644 (file)
@@ -9,7 +9,7 @@
  * See the file "LICENSE.TERMS" for information on usage and redistribution
  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  *
- * $Id: fcgiapp.h,v 1.5 2000/11/05 17:09:36 robs Exp $
+ * $Id: fcgiapp.h,v 1.6 2001/06/22 13:17:18 skimo Exp $
  */
 
 #ifndef _FCGIAPP_H
@@ -236,11 +236,12 @@ DLLAPI void FCGX_Finish_r(FCGX_Request *request);
  *
  * FCGX_Free --
  *
- *      Free the memory and IPC FD associated with the request (multi-thread safe).
+ *      Free the memory and, if close is true, 
+ *         IPC FD associated with the request (multi-thread safe).
  *
  *----------------------------------------------------------------------
  */
-DLLAPI void FCGX_Free(FCGX_Request * request);
+DLLAPI void FCGX_Free(FCGX_Request * request, int close);
 
 /*
  *----------------------------------------------------------------------
index 23e55ac..7236594 100644 (file)
@@ -11,7 +11,7 @@
  *
  */
 #ifndef lint
-static const char rcsid[] = "$Id: fcgiapp.c,v 1.24 2001/06/22 09:12:03 skimo Exp $";
+static const char rcsid[] = "$Id: fcgiapp.c,v 1.25 2001/06/22 13:17:19 skimo Exp $";
 #endif /* not lint */
 
 #include <assert.h>
@@ -1990,26 +1990,26 @@ void FCGX_Finish(void)
  */
 void FCGX_Finish_r(FCGX_Request *reqDataPtr)
 {
+    int close;
+
     if (reqDataPtr == NULL) {
         return;
     }
 
+    close = !reqDataPtr->keepConnection;
+
     /* This should probably use a 'status' member instead of 'in' */
     if (reqDataPtr->in) {
-        int errStatus = FCGX_FClose(reqDataPtr->err);
-        int outStatus = FCGX_FClose(reqDataPtr->out);
+        close |= FCGX_FClose(reqDataPtr->err);
+        close |= FCGX_FClose(reqDataPtr->out);
 
-        if (errStatus || outStatus || FCGX_GetError(reqDataPtr->in))
-        {
-            OS_IpcClose(reqDataPtr->ipcFd);
-            reqDataPtr->ipcFd = -1;
-        }
+       close |= FCGX_GetError(reqDataPtr->in);
     }
 
-    FCGX_Free(reqDataPtr);
+    FCGX_Free(reqDataPtr, close);
 }
 
-void FCGX_Free(FCGX_Request * request)
+void FCGX_Free(FCGX_Request * request, int close)
 {
     if (request == NULL) 
         return;
@@ -2019,8 +2019,7 @@ void FCGX_Free(FCGX_Request * request)
     FreeStream(&request->err);
     FreeParams(&request->paramsPtr);
 
-    if (!request->keepConnection)
-    {
+    if (close) {
         OS_IpcClose(request->ipcFd);
         request->ipcFd = -1;
     }
@@ -2233,8 +2232,7 @@ int FCGX_Accept_r(FCGX_Request *reqDataPtr)
          * Close the connection and try again.
          */
 TryAgain:
-       reqDataPtr->keepConnection = 0;
-        FCGX_Free(reqDataPtr);
+        FCGX_Free(reqDataPtr, 1);
 
     } /* for (;;) */
     /*
index 5fc9fc5..544b7e1 100644 (file)
@@ -12,7 +12,7 @@ unless ($] >= 5.005) {
 print OUT while <DATA>;
 close OUT;
 __END__
-/* $Id: FCGI.XL,v 1.1 2000/12/31 21:46:58 skimo Exp $ */
+/* $Id: FCGI.XL,v 1.2 2001/06/22 13:17:20 skimo Exp $ */
 
 #include "EXTERN.h"
 #include "perl.h"
@@ -294,7 +294,7 @@ FCGI_Finish(FCGP_Request* request)
     if (was_bound)
        FCGX_Finish_r(request->requestPtr);
     else
-       FCGX_Free(request->requestPtr);
+       FCGX_Free(request->requestPtr, 1);
     request->accepted = FALSE;
 }