summaryrefslogtreecommitdiffstats
path: root/generic/tclClock.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tclClock.c')
-rw-r--r--generic/tclClock.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/generic/tclClock.c b/generic/tclClock.c
index e156cf3..1c9f77e 100644
--- a/generic/tclClock.c
+++ b/generic/tclClock.c
@@ -2249,6 +2249,9 @@ ConvertUTCToLocal(
return TCL_ERROR;
}
+ /* signal we need to revalidate TZ epoch next time fields gets used. */
+ fields->flags |= CLF_CTZ;
+
/* we cannot cache (ranges unknown yet) */
} else {
Tcl_WideInt rangesVal[2];
@@ -2258,6 +2261,9 @@ ConvertUTCToLocal(
return TCL_ERROR;
}
+ /* converted using table (TZ isn't :localtime) */
+ fields->flags &= ~CLF_CTZ;
+
/* Cache the last conversion */
if (ltzoc != NULL) { /* slot was found above */
/* timezoneObj and changeover are the same */
@@ -3491,7 +3497,10 @@ baseNow:
/* check base fields already cached (by TZ, last-second cache) */
if ( dataPtr->lastBase.timezoneObj == opts->timezoneObj
- && dataPtr->lastBase.date.seconds == baseVal) {
+ && dataPtr->lastBase.date.seconds == baseVal
+ && (!(dataPtr->lastBase.date.flags & CLF_CTZ)
+ || dataPtr->lastTZEpoch == TzsetIfNecessary())
+ ) {
memcpy(date, &dataPtr->lastBase.date, ClockCacheableDateFieldsSize);
} else {
/* extact fields from base */