]> git.sesse.net Git - vlc/blobdiff - src/misc/threads.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / misc / threads.c
index 0341747dc10706baf4425ef5f1c1d54067f0bc16..fd84ad7270cc94de9779719290817947eacda60b 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "libvlc.h"
 #include <assert.h>
+#include <errno.h>
 #ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
@@ -99,12 +100,13 @@ int vlc_thread_create( vlc_object_t *p_this, const char * psz_file, int i_line,
     return i_ret;
 }
 
+#undef vlc_thread_set_priority
 /*****************************************************************************
  * vlc_thread_set_priority: set the priority of the current thread when we
  * couldn't set it in vlc_thread_create (for instance for the main thread)
  *****************************************************************************/
-int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
-                               int i_line, int i_priority )
+int vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
+                             int i_line, int i_priority )
 {
     vlc_object_internals_t *p_priv = vlc_internals( p_this );
 
@@ -116,7 +118,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
 
 #if defined( LIBVLC_USE_PTHREAD )
 # ifndef __APPLE__
-    if( config_GetInt( p_this, "rt-priority" ) > 0 )
+    if( var_InheritBool( p_this, "rt-priority" ) )
 # endif
     {
         int i_error, i_policy;
@@ -124,7 +126,7 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
 
         memset( &param, 0, sizeof(struct sched_param) );
         if( config_GetType( p_this, "rt-offset" ) )
-            i_priority += config_GetInt( p_this, "rt-offset" );
+            i_priority += var_InheritInteger( p_this, "rt-offset" );
         if( i_priority <= 0 )
         {
             param.sched_priority = (-1) * i_priority;
@@ -148,7 +150,11 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
 #elif defined( WIN32 ) || defined( UNDER_CE )
     VLC_UNUSED( psz_file); VLC_UNUSED( i_line );
 
+#ifndef UNDER_CE
     if( !SetThreadPriority(p_priv->thread_id, i_priority) )
+#else
+    if( !SetThreadPriority(p_priv->thread_id->handle, i_priority) )
+#endif
     {
         msg_Warn( p_this, "couldn't set a faster priority" );
         return 1;
@@ -159,10 +165,11 @@ int __vlc_thread_set_priority( vlc_object_t *p_this, const char * psz_file,
     return 0;
 }
 
+#undef vlc_thread_join
 /*****************************************************************************
  * vlc_thread_join: wait until a thread exits, inner version
  *****************************************************************************/
-void __vlc_thread_join( vlc_object_t *p_this )
+void vlc_thread_join( vlc_object_t *p_this )
 {
     vlc_object_internals_t *p_priv = vlc_internals( p_this );
 
@@ -226,3 +233,25 @@ void vlc_thread_cancel (vlc_object_t *obj)
     if (priv->b_thread)
         vlc_cancel (priv->thread_id);
 }
+
+/*** Global locks ***/
+
+void vlc_global_mutex (unsigned n, bool acquire)
+{
+    static vlc_mutex_t locks[] = {
+        VLC_STATIC_MUTEX,
+        VLC_STATIC_MUTEX,
+        VLC_STATIC_MUTEX,
+    };
+    assert (n < (sizeof (locks) / sizeof (locks[0])));
+    vlc_mutex_t *lock = locks + n;
+
+    if (acquire)
+        vlc_mutex_lock (lock);
+    else
+        vlc_mutex_unlock (lock);
+
+    /* Compile-time assertion ;-) */
+    char enough_locks[(sizeof (locks) / sizeof (locks[0])) - VLC_MAX_MUTEX];
+    (void) enough_locks;
+}