@@ -63,10 +63,11 @@ * FUSE threads are created */ const char *appfs_cachedir; time_t appfs_boottime; int appfs_fuse_started = 0; +int appfs_threaded_tcl; /* * Global variables for AppFS caching */ pthread_mutex_t appfs_path_info_cache_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -79,11 +80,10 @@ */ pthread_mutex_t appfs_tcl_big_global_lock = PTHREAD_MUTEX_INITIALIZER; #define appfs_call_libtcl_enter pthread_mutex_lock(&appfs_tcl_big_global_lock); #define appfs_call_libtcl_exit pthread_mutex_unlock(&appfs_tcl_big_global_lock); #else -#warning Using a Threaded Tcl interpreter may cause memory leaks #define appfs_call_libtcl_enter /**/ #define appfs_call_libtcl_exit /**/ #endif #define appfs_call_libtcl(x...) appfs_call_libtcl_enter x appfs_call_libtcl_exit @@ -967,11 +967,11 @@ tcl_ret = Tcl_GetWideIntFromObj(NULL, attr_value, &attr_value_wide); if (tcl_ret == TCL_OK) { pathinfo->time = attr_value_wide; } } else { - pathinfo->time = 0; + pathinfo->time = appfs_boottime; } Tcl_Release(interp); ) @@ -1868,10 +1868,11 @@ /* Initiate a hot-restart */ static void appfs_hot_restart(void) { APPFS_DEBUG("Asked to initiate hot restart"); appfs_tcl_ResetInterps(); + appfs_get_path_info_cache_flush(-1, -1); return; } @@ -1913,14 +1914,150 @@ appfs_call_libtcl( Tcl_DeleteInterp(interp); ) - Tcl_FinalizeThread(); + appfs_call_libtcl( + Tcl_FinalizeThread(); + ) + + return; +} + +/* + * Command-line parsing tools + */ +static void appfs_print_help(FILE *channel) { + fprintf(channel, "Usage: {appfsd|mount.appfs} [-o