Commit 6ae117da authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

libvlc: fix potentially leaked error message

parent 99fffd13
...@@ -30,8 +30,10 @@ static const char oom[] = "Out of memory"; ...@@ -30,8 +30,10 @@ static const char oom[] = "Out of memory";
/* TODO: use only one thread-specific key for whole libvlc */ /* TODO: use only one thread-specific key for whole libvlc */
static vlc_threadvar_t context; static vlc_threadvar_t context;
static vlc_mutex_t lock = VLC_STATIC_MUTEX; static char *get_error (void)
static uintptr_t refs = 0; {
return vlc_threadvar_get (context);
}
static void free_msg (void *msg) static void free_msg (void *msg)
{ {
...@@ -39,6 +41,14 @@ static void free_msg (void *msg) ...@@ -39,6 +41,14 @@ static void free_msg (void *msg)
free (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) void libvlc_threads_init (void)
{ {
vlc_mutex_lock (&lock); vlc_mutex_lock (&lock);
...@@ -52,20 +62,13 @@ void libvlc_threads_deinit (void) ...@@ -52,20 +62,13 @@ void libvlc_threads_deinit (void)
vlc_mutex_lock (&lock); vlc_mutex_lock (&lock);
assert (refs > 0); assert (refs > 0);
if (--refs == 0) if (--refs == 0)
{
free_error ();
vlc_threadvar_delete (&context); vlc_threadvar_delete (&context);
}
vlc_mutex_unlock (&lock); 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 * 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 * thread. The resulting string is valid until another error occurs (at least
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment