clockoverlay: fix bogus time display caused by previous commit

Fixes regression introduced by "clean-up" done as part of commit 98ebcb4.

dummy must live as long as use the return value of localtime_r() since
that's just a pointer to it, and by putting it inside the block we made
dummy go out of scope right after localtime_r() returned, which messed
up the time values since when we poked at the struct the contents might
already have been overwritten.

Fixes #722
This commit is contained in:
Tim-Philipp Müller 2020-01-23 18:03:13 +00:00
parent 19b7b248cc
commit 37c996dcf4

View file

@ -75,6 +75,9 @@ static void gst_clock_overlay_get_property (GObject * object, guint prop_id,
static gchar * static gchar *
gst_clock_overlay_render_time (GstClockOverlay * overlay) gst_clock_overlay_render_time (GstClockOverlay * overlay)
{ {
#ifdef HAVE_LOCALTIME_R
struct tm dummy;
#endif
struct tm *t; struct tm *t;
time_t now; time_t now;
gchar buf[256]; gchar buf[256];
@ -82,14 +85,10 @@ gst_clock_overlay_render_time (GstClockOverlay * overlay)
now = time (NULL); now = time (NULL);
#ifdef HAVE_LOCALTIME_R #ifdef HAVE_LOCALTIME_R
{ /* Need to call tzset explicitly when calling localtime_r for changes
struct tm dummy; * to the timezone between calls to be visible. */
tzset ();
/* Need to call tzset explicitly when calling localtime_r for changes t = localtime_r (&now, &dummy);
* to the timezone between calls to be visible. */
tzset ();
t = localtime_r (&now, &dummy);
}
#else #else
/* on win32 this apparently returns a per-thread struct which would be fine */ /* on win32 this apparently returns a per-thread struct which would be fine */
t = localtime (&now); t = localtime (&now);