You are viewing a plain text version of this content. The canonical link for it is here.
Posted to rivet-dev@tcl.apache.org by ka...@apache.org on 2009/05/07 04:48:49 UTC

svn commit: r772489 - /tcl/rivet/trunk/src/apache-2/mod_rivet.c

Author: karl
Date: Thu May  7 02:48:49 2009
New Revision: 772489

URL: http://svn.apache.org/viewvc?rev=772489&view=rev
Log:
Correct bug in last commit.  Now it works (Apache 2 anyway).

Modified:
    tcl/rivet/trunk/src/apache-2/mod_rivet.c

Modified: tcl/rivet/trunk/src/apache-2/mod_rivet.c
URL: http://svn.apache.org/viewvc/tcl/rivet/trunk/src/apache-2/mod_rivet.c?rev=772489&r1=772488&r2=772489&view=diff
==============================================================================
--- tcl/rivet/trunk/src/apache-2/mod_rivet.c (original)
+++ tcl/rivet/trunk/src/apache-2/mod_rivet.c Thu May  7 02:48:49 2009
@@ -1281,13 +1281,16 @@
         //errmsg = (char *) apr_pstrdup(p, "Error in child exit script: %s");
     }
 
-    sr = s;
-    while (sr)
+    for (sr = s; sr; sr = sr->next)
     {
         rsc = RIVET_SERVER_CONF(sr->module_config);
         function = init ? rsc->rivet_child_init_script :
             rsc->rivet_child_exit_script;
 
+	if (!init && sr == s) {
+	    Tcl_Preserve(rsc->server_interp);
+	}
+
         /* Execute it if it exists and it's the top level, separate
          * virtual interps are turned on, or it's different than the
          * main script. */
@@ -1309,20 +1312,20 @@
 	    Tcl_Release (rsc->server_interp);
 
         }
-        sr = sr->next;
+    }
 
-	if (!init) {
-	    /*
-	     * Upon child exit we delete the master interpreter before the 
-	     * caller invokes Tcl_Finalize.  Even if we're running separate
-	     * virtual interpreters, we don't delete the slaves
-	     * as deleting the master implicitly deltes its slave interpreters.
-	     */
-	    rsc = RIVET_SERVER_CONF(s->module_config);
-	    if (!Tcl_InterpDeleted (rsc->server_interp)) {
-		Tcl_DeleteInterp(rsc->server_interp);
-	    }
+    if (!init) {
+	/*
+	 * Upon child exit we delete the master interpreter before the 
+	 * caller invokes Tcl_Finalize.  Even if we're running separate
+	 * virtual interpreters, we don't delete the slaves
+	 * as deleting the master implicitly deltes its slave interpreters.
+	 */
+	rsc = RIVET_SERVER_CONF(s->module_config);
+	if (!Tcl_InterpDeleted (rsc->server_interp)) {
+	    Tcl_DeleteInterp(rsc->server_interp);
 	}
+	Tcl_Release (rsc->server_interp);
     }
 }
 /*



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