Index: generic/nsf.c =================================================================== diff -u -r566ca938865b2808a5ace7e91e4138c5f0177dc6 -r90559741eea6829e9bf09560d136759813b0dbdd --- generic/nsf.c (.../nsf.c) (revision 566ca938865b2808a5ace7e91e4138c5f0177dc6) +++ generic/nsf.c (.../nsf.c) (revision 90559741eea6829e9bf09560d136759813b0dbdd) @@ -595,7 +595,7 @@ nonnull_assert(interp != NULL); nonnull_assert(fmt != NULL); - if (RUNTIME_STATE(interp)->debugLevel >= requiredLevel) { + if (requiredLevel >= RUNTIME_STATE(interp)->logSeverity) { Tcl_DString cmdString, ds; const char *level; va_list ap; @@ -11137,7 +11137,7 @@ if (defObject != object) { int result; - NsfLog(interp, NSF_LOG_NOTICE, "Define automatically alias %s for %s", + NsfLog(interp, NSF_LOG_DEBUG, "Define automatically alias %s for %s", ObjStr(osPtr->handles[i]), Nsf_SystemMethodOpts[i]); result = NsfMethodAliasCmd(interp, defObject, 0, methodName, 0, @@ -14469,7 +14469,7 @@ } else { result = TCL_OK; #if defined(NSF_WITH_VALUE_WARNINGS) - if (RUNTIME_STATE(interp)->debugLevel > 0) { + if (RUNTIME_STATE(interp)->logSeverity == NSF_LOG_DEBUG) { const char *value = ObjStr(objPtr); if (unlikely(*value == '-' && (pPtr->flags & NSF_ARG_CHECK_NONPOS) != 0u @@ -24760,17 +24760,17 @@ } if (configureoption == ConfigureoptionDebugIdx) { - int level; if (valueObj != NULL) { - int result = Tcl_GetIntFromObj(interp, valueObj, &level); + int level, result = Tcl_GetIntFromObj(interp, valueObj, &level); + if (unlikely(result != TCL_OK)) { return result; } - RUNTIME_STATE(interp)->debugLevel = level; + RUNTIME_STATE(interp)->logSeverity = level; } Tcl_SetIntObj(Tcl_GetObjResult(interp), - RUNTIME_STATE(interp)->debugLevel); + RUNTIME_STATE(interp)->logSeverity); return TCL_OK; } @@ -31728,7 +31728,7 @@ nonnull_assert(clientData != NULL); - /*fprintf(stderr, "ExitHandler\n");*/ + /*fprintf(stderr, "+++ ExitHandler interp %p deleted %d\n", interp, (Tcl_Interp_flags(interp) & DELETED));*/ /* * Don't use exit handler, if the interpreter is already destroyed. @@ -31758,6 +31758,7 @@ CallStackPopAll(interp); + if (rst->exitHandlerDestroyRound == NSF_EXITHANDLER_OFF) { NsfFinalizeCmd(interp, 0); } @@ -31798,6 +31799,7 @@ /* * Free runtime state. */ + /*fprintf(stderr, "+++ ExiHandler frees runtime state of interp %p\n",interp);*/ ckfree((char *) RUNTIME_STATE(interp)); #if USE_ASSOC_DATA Tcl_DeleteAssocData(interp, "NsfRuntimeState"); @@ -31825,10 +31827,10 @@ } } #endif - + Tcl_Interp_flags(interp) = flags; Tcl_Release(interp); - + MEM_COUNT_RELEASE(); } @@ -31845,8 +31847,9 @@ nonnull_assert(clientData != NULL); - /*fprintf(stderr, "+++ Nsf_ThreadExitProc\n");*/ + /* fprintf(stderr, "+++ Nsf_ThreadExitProc %p\n", clientData);*/ + Tcl_DeleteThreadExitHandler(Nsf_ThreadExitProc, clientData); Tcl_DeleteExitHandler(Nsf_ExitProc, clientData); ExitHandler(clientData); } @@ -31862,8 +31865,9 @@ nonnull_assert(clientData != NULL); - /*fprintf(stderr, "+++ Nsf_ExitProc\n");*/ + /*fprintf(stderr, "+++ Nsf_ExitProc %p\n", clientData);*/ #if defined(TCL_THREADS) + Tcl_DeleteExitHandler(Nsf_ExitProc, clientData); Tcl_DeleteThreadExitHandler(Nsf_ThreadExitProc, clientData); #endif ExitHandler(clientData); @@ -32012,6 +32016,7 @@ NsfProfileInit(interp); #endif rst = RUNTIME_STATE(interp); + rst->logSeverity = NSF_LOG_NOTICE; rst->doFilters = 1; rst->doCheckResults = 1; rst->doCheckArguments = NSF_ARGPARSE_CHECK;