You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-cvs@tcl.apache.org by ro...@apache.org on 2006/03/05 02:08:46 UTC

svn commit: r383261 - in /tcl/websh/trunk/src/generic: request.c request.h

Author: ronnie
Date: Sat Mar  4 17:08:46 2006
New Revision: 383261

URL: http://svn.apache.org/viewcvs?rev=383261&view=rev
Log:
- added exit handler to destroy requestData on regular
  exit (make sure tempfiles get cleaned up properly in CGI mode,
  at least when process is not killed or anything)

Modified:
    tcl/websh/trunk/src/generic/request.c
    tcl/websh/trunk/src/generic/request.h

Modified: tcl/websh/trunk/src/generic/request.c
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/request.c?rev=383261&r1=383260&r2=383261&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/request.c (original)
+++ tcl/websh/trunk/src/generic/request.c Sat Mar  4 17:08:46 2006
@@ -26,10 +26,10 @@
 #include <sys/errno.h>
 #endif
 
-/*void dRequestData(ClientData clientData)
+void destroyRequestDataHook(ClientData clientData)
 {
     destroyRequestData(clientData, NULL);
-}*/
+}
 
 /* ----------------------------------------------------------------------------
  * Init --
@@ -83,11 +83,12 @@
 		     destroyRequestData, (ClientData) requestData);
 
     /* -------------------------------------------------------------------------
-     * need an exit handler too (if this is the main interp)
+     * we need an exit handler (if this is the main interp)
+     * because we need to delete temp files on regular exit too
      * ---------------------------------------------------------------------- */
-    /*fixme: do we really need this? (it's leaking memory) */
-    /*if (Tcl_GetMaster(interp) == NULL)
-      Tcl_CreateThreadExitHandler(dRequestData, (ClientData) requestData);*/
+    if (Tcl_GetMaster(interp) == NULL) {
+      Tcl_CreateExitHandler(destroyRequestDataHook, (ClientData) requestData);
+    }
 
     /* -------------------------------------------------------------------------
      * done
@@ -240,6 +241,9 @@
     if (clientData != NULL) {
 
 	requestData = (RequestData *) clientData;
+
+	/* delete exit handler to prevent memory leak */
+	Tcl_DeleteExitHandler(destroyRequestDataHook, (ClientData) requestData);
 
 	WebDecrRefCountIfNotNull(requestData->cmdTag);
 	WebDecrRefCountIfNotNull(requestData->timeTag);

Modified: tcl/websh/trunk/src/generic/request.h
URL: http://svn.apache.org/viewcvs/tcl/websh/trunk/src/generic/request.h?rev=383261&r1=383260&r2=383261&view=diff
==============================================================================
--- tcl/websh/trunk/src/generic/request.h (original)
+++ tcl/websh/trunk/src/generic/request.h Sat Mar  4 17:08:46 2006
@@ -105,7 +105,7 @@
 RequestData;
 
 
-/*void dRequestData(ClientData clientData);*/
+void destroyRequestDataHook(ClientData clientData);
 
 RequestData *createRequestData(Tcl_Interp * interp);
 int resetRequestData(Tcl_Interp * interp, RequestData * requestData);



---------------------------------------------------------------------
To unsubscribe, e-mail: websh-cvs-unsubscribe@tcl.apache.org
For additional commands, e-mail: websh-cvs-help@tcl.apache.org