/* TODO: use only one thread-specific key for whole libvlc */
static vlc_threadvar_t context;
-static void libvlc_setup_threads (bool init)
+static char *get_error (void)
{
- static vlc_mutex_t lock = VLC_STATIC_MUTEX;
- static uintptr_t refs = 0;
-
- vlc_mutex_lock (&lock);
- if (init)
- {
- if (refs++ == 0)
- vlc_threadvar_create (&context, free);
- }
- else
- {
- assert (refs > 0);
- if (--refs == 0)
- vlc_threadvar_delete (&context);
- }
- vlc_mutex_unlock (&lock);
+ return vlc_threadvar_get (context);
}
-void libvlc_init_threads (void)
+static void free_msg (void *msg)
{
- libvlc_setup_threads (true);
+ if (msg != oom)
+ free (msg);
}
-void libvlc_deinit_threads (void)
+static void free_error (void)
{
- libvlc_setup_threads (false);
+ free_msg (get_error ());
}
-static char *get_error (void)
+static vlc_mutex_t lock = VLC_STATIC_MUTEX;
+static uintptr_t refs = 0;
+
+void libvlc_threads_init (void)
{
- return vlc_threadvar_get (context);
+ vlc_mutex_lock (&lock);
+ if (refs++ == 0)
+ vlc_threadvar_create (&context, free_msg);
+ vlc_mutex_unlock (&lock);
}
-static void free_error (void)
+void libvlc_threads_deinit (void)
{
- char *msg = get_error ();
- if (msg != oom)
- free (msg);
+ vlc_mutex_lock (&lock);
+ assert (refs > 0);
+ if (--refs == 0)
+ {
+ free_error ();
+ vlc_threadvar_delete (&context);
+ }
+ vlc_mutex_unlock (&lock);
}
/**