I apologize but I sent on the list a patch that included some experimental code I had added.
-- Universita' degli Studi di Parma (http://www.unipr.it)
Index: src/apache-2/mod_rivet.c =================================================================== --- src/apache-2/mod_rivet.c (revision 587497) +++ src/apache-2/mod_rivet.c (working copy) @@ -24,6 +24,9 @@ #include <sys/stat.h> #include <string.h> +/* as long as we need to emulate ap_chdir_file we need to include unistd.h */ +#include <unistd.h> + /* Apache includes */ #include <httpd.h> #include <http_config.h> @@ -412,8 +415,9 @@ delEntry = Tcl_FindHashEntry( rsc->objCache, rsc->objCacheList[ct]); - if (delEntry != NULL) + if (delEntry != NULL) { Tcl_DecrRefCount((Tcl_Obj *)Tcl_GetHashValue(delEntry)); + } Tcl_DeleteHashEntry(delEntry); free(rsc->objCacheList[ct]); @@ -672,17 +676,14 @@ } } - - - /* Function to get a config and merge the directory/server options */ rivet_server_conf * Rivet_GetConf( request_rec *r ) { - rivet_server_conf *newconfig = NULL; rivet_server_conf *rsc = RIVET_SERVER_CONF( r->server->module_config ); - rivet_server_conf *rdc; void *dconf = r->per_dir_config; + //rivet_server_conf *newconfig = NULL; + //rivet_server_conf *rdc; //int tst; FILEDEBUGINFO; @@ -691,9 +692,8 @@ if (dconf == NULL) { return rsc; } - return rsc; - +/* rdc = RIVET_SERVER_CONF( dconf ); newconfig = RIVET_NEW_CONF( r->pool ); @@ -703,6 +703,7 @@ Rivet_MergeDirConfigVars( r->pool, newconfig, rsc, rdc ); return newconfig; + */ } static void * @@ -805,8 +806,6 @@ Tcl_DecrRefCount(arrayName); } - - /* *----------------------------------------------------------------------------- * @@ -849,6 +848,10 @@ /* Eval Rivet's init.tcl file to load in the Tcl-level commands. */ + +// ap_log_error(APLOG_MARK, APLOG_ERR, APR_EGENERAL, s, "auto_path: %s", +// Tcl_GetVar(interp, "auto_path", TCL_GLOBAL_ONLY)); + if (Tcl_PkgRequire(interp, "RivetTcl", "1.1", 1) == NULL) { ap_log_error( APLOG_MARK, APLOG_ERR, APR_EGENERAL, s, "init.tcl must be installed correctly for Apache Rivet to function: %s", @@ -1048,7 +1051,11 @@ Rivet_InitHandler(apr_pool_t *pPool, apr_pool_t *pLog, apr_pool_t *pTemp, server_rec *s) { +#ifdef HIDE_RIVET_VERSION ap_add_version_component(pPool, "Rivet"); +#else + ap_add_version_component(pPool, "Rivet/"VERSION); +#endif return OK; } @@ -1248,13 +1255,22 @@ ( sr == s || rsc->separate_virtual_interps || function != parentfunction)) { - if (Tcl_EvalObjEx(rsc->server_interp, - function, 0) != TCL_OK) { + if (Tcl_EvalObjEx(rsc->server_interp,function, 0) != TCL_OK) { ap_log_error(APLOG_MARK, APLOG_ERR, APR_EGENERAL, s, errmsg, Tcl_GetString(function)); ap_log_error(APLOG_MARK, APLOG_ERR, APR_EGENERAL, s, "%s", Tcl_GetVar(rsc->server_interp, "errorInfo", 0)); } + + /* + * Upon child exit we delete each interpreter before the caller + * uses Tcl_Finalize + */ + + if (!init) { + Tcl_DeleteInterp(rsc->server_interp); + } + } sr = sr->next; } @@ -1434,7 +1450,7 @@ Rivet_ChildHandlers(s, 1); //cleanup - //apr_pool_cleanup_register (pChild, s, Rivet_ChildExit, Rivet_ChildExit); + apr_pool_cleanup_register (pChild, s, Rivet_ChildExit, Rivet_ChildExit); } /* Set things up to execute a file, then execute */ @@ -1600,7 +1616,7 @@ { //static const char * const aszPre[] = { // "http_core.c", "mod_mime.c", NULL }; - static const char * const aszPreTranslate[] = {"mod_alias.c", NULL}; + //static const char * const aszPreTranslate[] = {"mod_alias.c", NULL}; ap_hook_post_config (Rivet_InitHandler, NULL, NULL, APR_HOOK_LAST); ap_hook_handler (Rivet_SendContent, NULL, NULL, APR_HOOK_LAST);
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]