/* TODO: use only one thread-specific key for whole libvlc */
static vlc_threadvar_t context;
+static char *get_error (void)
+{
+ return vlc_threadvar_get (context);
+}
+
+static void free_msg (void *msg)
+{
+ if (msg != oom)
+ free (msg);
+}
+
+static void free_error (void)
+{
+ free_msg (get_error ());
+}
+
static vlc_mutex_t lock = VLC_STATIC_MUTEX;
static uintptr_t refs = 0;
{
vlc_mutex_lock (&lock);
if (refs++ == 0)
- {
- vlc_threadvar_create (&context, free);
- libvlc_log_init ();
- }
+ vlc_threadvar_create (&context, free_msg);
vlc_mutex_unlock (&lock);
}
assert (refs > 0);
if (--refs == 0)
{
- libvlc_log_deinit ();
+ 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)
-{
- char *msg = get_error ();
- if (msg != oom)
- free (msg);
-}
-
/**
* 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