diff --git a/lib/error.c b/lib/error.c index 45397a66c9..a86c95b9e7 100644 --- a/lib/error.c +++ b/lib/error.c @@ -30,8 +30,10 @@ static const char oom[] = "Out of memory"; /* TODO: use only one thread-specific key for whole libvlc */ static vlc_threadvar_t context; -static vlc_mutex_t lock = VLC_STATIC_MUTEX; -static uintptr_t refs = 0; +static char *get_error (void) +{ + return vlc_threadvar_get (context); +} static void free_msg (void *msg) { @@ -39,6 +41,14 @@ static void free_msg (void *msg) free (msg); } +static void free_error (void) +{ + free_msg (get_error ()); +} + +static vlc_mutex_t lock = VLC_STATIC_MUTEX; +static uintptr_t refs = 0; + void libvlc_threads_init (void) { vlc_mutex_lock (&lock); @@ -52,20 +62,13 @@ void libvlc_threads_deinit (void) vlc_mutex_lock (&lock); assert (refs > 0); if (--refs == 0) + { + free_error (); vlc_threadvar_delete (&context); + } vlc_mutex_unlock (&lock); } -static char *get_error (void) -{ - return vlc_threadvar_get (context); -} - -static void free_error (void) -{ - free_msg (get_error ()); -} - /** * Gets a human-readable error message for the last LibVLC error in the calling * thread. The resulting string is valid until another error occurs (at least