Index: generic/nsf.c =================================================================== diff -u -r0311e86856d1a716d494dc371bd4000c7945c51d -r843e576364a54a491861bad94df4cbf31f878ab3 --- generic/nsf.c (.../nsf.c) (revision 0311e86856d1a716d494dc371bd4000c7945c51d) +++ generic/nsf.c (.../nsf.c) (revision 843e576364a54a491861bad94df4cbf31f878ab3) @@ -31720,9 +31720,12 @@ } #endif + Nsf_EnumerationTypeRelease(interp); + Nsf_CmdDefinitionRelease(interp); + Tcl_Interp_flags(interp) = flags; Tcl_Release(interp); - + MEM_COUNT_RELEASE(); } Index: generic/nsfCmdDefinitions.c =================================================================== diff -u -r7243f88cec779c0274f22e569790c7ad1216800f -r843e576364a54a491861bad94df4cbf31f878ab3 --- generic/nsfCmdDefinitions.c (.../nsfCmdDefinitions.c) (revision 7243f88cec779c0274f22e569790c7ad1216800f) +++ generic/nsfCmdDefinitions.c (.../nsfCmdDefinitions.c) (revision 843e576364a54a491861bad94df4cbf31f878ab3) @@ -73,7 +73,35 @@ NsfMutexUnlock(&cmdDefinitonMutex); } +/*---------------------------------------------------------------------- +* Nsf_EnumerationTypeRelease -- +* +* Release and, eventually, delete the hash table for method definitions. +* +* Results: +* None. +* +* Side effects: +* None. +* +*---------------------------------------------------------------------- +*/ +void +Nsf_CmdDefinitionRelease(Tcl_Interp *interp) { + + nonnull_assert(interp != NULL); + + NsfMutexLock(&cmdDefinitonMutex); + + if (cmdDefinitonRefCount-- < 1) { + Tcl_DeleteHashTable(cmdDefinitonHashTablePtr); + } + + NsfMutexUnlock(&cmdDefinitonMutex); +} + + /* *---------------------------------------------------------------------- * Nsf_CmdDefinitionRegister -- Index: generic/nsfEnumerationType.c =================================================================== diff -u -r7243f88cec779c0274f22e569790c7ad1216800f -r843e576364a54a491861bad94df4cbf31f878ab3 --- generic/nsfEnumerationType.c (.../nsfEnumerationType.c) (revision 7243f88cec779c0274f22e569790c7ad1216800f) +++ generic/nsfEnumerationType.c (.../nsfEnumerationType.c) (revision 843e576364a54a491861bad94df4cbf31f878ab3) @@ -74,6 +74,36 @@ /* *---------------------------------------------------------------------- + * Nsf_EnumerationTypeRelease -- + * + * Release and, eventually, delete the hash table for enumeration-type + * converters. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ +void +Nsf_EnumerationTypeRelease(Tcl_Interp *interp) { + + nonnull_assert(interp != NULL); + + NsfMutexLock(&enumerationMutex); + + if (enumerationTypeRefCount-- < 1) { + Tcl_DeleteHashTable(enumerationHashTablePtr); + } + + NsfMutexUnlock(&enumerationMutex); +} + + +/* + *---------------------------------------------------------------------- * Nsf_EnumerationTypeRegister -- * * Registers an array of enumeration types upon NSF initialization. Index: generic/nsfInt.h =================================================================== diff -u -rc39e939183732462f9b41cf988c01b69b9faace5 -r843e576364a54a491861bad94df4cbf31f878ab3 --- generic/nsfInt.h (.../nsfInt.h) (revision c39e939183732462f9b41cf988c01b69b9faace5) +++ generic/nsfInt.h (.../nsfInt.h) (revision 843e576364a54a491861bad94df4cbf31f878ab3) @@ -1240,6 +1240,9 @@ EXTERN void Nsf_EnumerationTypeInit(Tcl_Interp *interp) nonnull(1); +EXTERN void Nsf_EnumerationTypeRelease(Tcl_Interp *interp) + nonnull(1); + EXTERN const char *Nsf_EnumerationTypeGetDomain(Nsf_TypeConverter *converter) nonnull(1); @@ -1249,6 +1252,9 @@ EXTERN void Nsf_CmdDefinitionInit(Tcl_Interp *interp) nonnull(1); +EXTERN void Nsf_CmdDefinitionRelease(Tcl_Interp *interp) + nonnull(1); + EXTERN Nsf_methodDefinition *Nsf_CmdDefinitionGet(Tcl_ObjCmdProc *proc) nonnull(1);