Revert "gtimezone: Cache timezones based on the identifier they were created by"

This reverts commit 851241f19a.

That commit avoids a performance regression but introduces a behavior regression:
changes to /etc/localtime have no effect for the remaining of the application's
runtime.

With the optimization introduced by the previous commit, we can pass NULL to
g_time_zone_new() repeatedly with no performance drawback, so we no longer have
to workaround this case.

Fixes: #2224
This commit is contained in:
António Fernandes 2020-09-23 19:36:49 +01:00 committed by Philip Withnall
parent 25e634b26b
commit 36e7b48ad5

View File

@ -198,7 +198,6 @@ static GHashTable/*<string?, GTimeZone>*/ *time_zones;
G_LOCK_DEFINE_STATIC (tz_default); G_LOCK_DEFINE_STATIC (tz_default);
static GTimeZone *tz_default = NULL; static GTimeZone *tz_default = NULL;
G_LOCK_DEFINE_STATIC (tz_local); G_LOCK_DEFINE_STATIC (tz_local);
static gchar *tzenv_cached = NULL;
static GTimeZone *tz_local = NULL; static GTimeZone *tz_local = NULL;
#define MIN_TZYEAR 1916 /* Daylight Savings started in WWI */ #define MIN_TZYEAR 1916 /* Daylight Savings started in WWI */
@ -1869,17 +1868,11 @@ g_time_zone_new_local (void)
G_LOCK (tz_local); G_LOCK (tz_local);
/* Is time zone changed and must be flushed? */ /* Is time zone changed and must be flushed? */
if (tz_local && g_strcmp0 (tzenv, tzenv_cached) != 0) if (tz_local && g_strcmp0 (g_time_zone_get_identifier (tz_local), tzenv))
{ g_clear_pointer (&tz_local, g_time_zone_unref);
g_clear_pointer (&tz_local, g_time_zone_unref);
g_clear_pointer (&tzenv_cached, g_free);
}
if (tz_local == NULL) if (tz_local == NULL)
{ tz_local = g_time_zone_new (tzenv);
tz_local = g_time_zone_new (tzenv);
tzenv_cached = g_strdup (tzenv);
}
tz = g_time_zone_ref (tz_local); tz = g_time_zone_ref (tz_local);