]> git.sesse.net Git - vlc/commitdiff
Clean up CPU flags one-time initialization
authorRémi Denis-Courmont <remi@remlab.net>
Fri, 19 Aug 2011 20:19:01 +0000 (23:19 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Fri, 19 Aug 2011 20:38:38 +0000 (23:38 +0300)
src/libvlc.c
src/libvlc.h
src/misc/cpu.c
src/win32/thread.c

index 0c931c1a76785c8e69d66dc5b0199a86404ba59b..759a495ef4a7b36d3c7a691d51538ed09a8b8f92 100644 (file)
@@ -191,8 +191,6 @@ libvlc_int_t * libvlc_InternalCreate( void )
     vlc_mutex_lock( &global_lock );
     if( i_instances == 0 )
     {
-        /* Guess what CPU we have */
-        cpu_flags = CPUCapabilities();
         /* The module bank will be initialized later */
     }
 
index a4ef280268286b4cf594e05aa1d0f1aa8903a435..e562e1767f5eb85ce7c1ddc1ecf566cad493d24f 100644 (file)
@@ -41,6 +41,7 @@ void system_Init      ( void );
 void system_Configure ( libvlc_int_t *, int, const char *const [] );
 void system_End       ( void );
 
+void vlc_CPU_init(void);
 void vlc_CPU_dump(vlc_object_t *);
 
 /*
@@ -65,12 +66,6 @@ void vlc_assert_locked (vlc_mutex_t *);
 # define vlc_assert_locked( m ) (void)m
 #endif
 
-/*
- * CPU capabilities
- */
-extern uint32_t cpu_flags;
-uint32_t CPUCapabilities( void );
-
 /*
  * LibVLC exit event handling
  */
index 7e4b073263f7c814195be942d655669d42761b5e..24da34bd54b933c55fcb2fd2f576382ca33b1574 100644 (file)
@@ -49,6 +49,8 @@
 
 #include "libvlc.h"
 
+static uint32_t cpu_flags;
+
 #if defined( __i386__ ) || defined( __x86_64__ ) || defined( __powerpc__ ) \
  || defined( __ppc__ ) || defined( __ppc64__ ) || defined( __powerpc64__ )
 # ifndef WIN32
@@ -90,12 +92,11 @@ static bool check_OS_capability( const char *psz_capability, pid_t pid )
 # endif
 #endif
 
-/*****************************************************************************
- * CPUCapabilities: get the CPU capabilities
- *****************************************************************************
- * This function is called to list extensions the CPU may have.
- *****************************************************************************/
-uint32_t CPUCapabilities( void )
+/**
+ * Determines the CPU capabilities and stores them in cpu_flags.
+ * The result can be retrieved with vlc_CPU().
+ */
+void vlc_CPU_init (void)
 {
     uint32_t i_capabilities = 0;
 
@@ -322,17 +323,19 @@ out:
 #   endif
 
 #endif
-    return i_capabilities;
-}
-
-uint32_t cpu_flags = 0;
 
+    cpu_flags = i_capabilities;
+}
 
-/*****************************************************************************
- * vlc_CPU: get pre-computed CPU capability flags
- ****************************************************************************/
+/**
+ * Retrieves pre-computed CPU capability flags
+ */
 unsigned vlc_CPU (void)
 {
+#ifndef WIN32 /* On Windows, initialized from DllMain() instead */
+    static pthread_once_t once = PTHREAD_ONCE_INIT;
+    pthread_once (&once, vlc_CPU_init);
+#endif
     return cpu_flags;
 }
 
index a70b15c15cc62a97ce787f9383baf0d500dce819..5b5753cd50dcdef9baa227ec790332793a6f8cee 100644 (file)
@@ -82,6 +82,7 @@ BOOL WINAPI DllMain (HINSTANCE hinstDll, DWORD fdwReason, LPVOID lpvReserved)
             vlc_threadvar_create (&thread_key, NULL);
             vlc_rwlock_init (&config_lock);
             vlc_rwlock_init (&msg_lock);
+            vlc_CPU_init ();
             break;
 
         case DLL_PROCESS_DETACH: