summaryrefslogtreecommitdiffstats
path: root/generic/tclClockFmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclClockFmt.c')
-rw-r--r--generic/tclClockFmt.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/generic/tclClockFmt.c b/generic/tclClockFmt.c
index 4ab2423..140ecdd 100644
--- a/generic/tclClockFmt.c
+++ b/generic/tclClockFmt.c
@@ -26,7 +26,6 @@ static void ClockFmtObj_UpdateString(Tcl_Obj *objPtr);
TCL_DECLARE_MUTEX(ClockFmtMutex); /* Serializes access to common format list. */
static void ClockFmtScnStorageDelete(ClockFmtScnStorage *fss);
-static void ClockFrmScnFinalize(void *);
#ifndef TCL_CLOCK_FULL_COMPAT
#define TCL_CLOCK_FULL_COMPAT 1
@@ -682,7 +681,7 @@ ClockFmtObj_FreeInternalRep(
Tcl_Obj *objPtr)
{
ClockFmtScnStorage *fss = ObjClockFmtScn(objPtr);
- if (fss != NULL) {
+ if (fss != NULL && initialized) {
Tcl_MutexLock(&ClockFmtMutex);
/* decrement object reference count of format/scan storage */
if (--fss->objRefCount <= 0) {
@@ -836,7 +835,6 @@ FindOrCreateFmtScnStorage(
&ClockFmtScnStorageHashKeyType);
initialized = 1;
- Tcl_CreateExitHandler(ClockFrmScnFinalize, NULL);
}
/* get or create entry (and alocate storage) */
@@ -3561,10 +3559,12 @@ ClockFrmScnClearCaches(void)
Tcl_MutexUnlock(&ClockFmtMutex);
}
-static void
-ClockFrmScnFinalize(
- TCL_UNUSED(void *))
+void
+ClockFrmScnFinalize()
{
+ if (!initialized) {
+ return;
+ }
Tcl_MutexLock(&ClockFmtMutex);
#if CLOCK_FMT_SCN_STORAGE_GC_SIZE > 0
/* clear GC */
@@ -3573,8 +3573,8 @@ ClockFrmScnFinalize(
ClockFmtScnStorage_GC.count = 0;
#endif
if (initialized) {
- Tcl_DeleteHashTable(&FmtScnHashTable);
initialized = 0;
+ Tcl_DeleteHashTable(&FmtScnHashTable);
}
Tcl_MutexUnlock(&ClockFmtMutex);
Tcl_MutexFinalize(&ClockFmtMutex);