X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_threads.h;h=01e8b716aa389c84d993fc2f467fc78b48ea87b7;hb=d727c4590f83751a2f28fcdfd8af3886ebeb45d8;hp=a491daa90aa7fece111a5105c832e7421319e2f3;hpb=08f5c9dea42526a356e78bb3000400cde983de6f;p=vlc diff --git a/include/vlc_threads.h b/include/vlc_threads.h index a491daa90a..01e8b716aa 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -171,9 +171,10 @@ VLC_EXPORT( int, vlc_threadvar_create, (vlc_threadvar_t * , void (*) (void *) ) VLC_EXPORT( void, vlc_threadvar_delete, (vlc_threadvar_t *) ); VLC_EXPORT( int, __vlc_thread_create, ( vlc_object_t *, const char *, int, const char *, void * ( * ) ( void * ), int, bool ) ); VLC_EXPORT( int, __vlc_thread_set_priority, ( vlc_object_t *, const char *, int, int ) ); -VLC_EXPORT( void, __vlc_thread_ready, ( vlc_object_t * ) ); VLC_EXPORT( void, __vlc_thread_join, ( vlc_object_t *, const char *, int ) ); +#define vlc_thread_ready vlc_object_signal + /***************************************************************************** * vlc_mutex_lock: lock a mutex *****************************************************************************/ @@ -187,7 +188,7 @@ VLC_EXPORT(void, vlc_pthread_fatal, (const char *action, int error, const char * if (val) \ vlc_pthread_fatal (action, val, psz_file, i_line) #else -# define VLC_THREAD_ASSERT (void)0 +# define VLC_THREAD_ASSERT ((void)(val)) #endif static inline void __vlc_mutex_lock( const char * psz_file, int i_line, @@ -562,12 +563,19 @@ static inline int vlc_spin_init (vlc_spinlock_t *spin) /** * Issues a full memory barrier. */ +#if defined (__APPLE__) +# include /* OSMemoryBarrier() */ +#endif static inline void barrier (void) { -#if defined (__APPLE__) - OSMemoryBarrier(); -#elif defined (__GNUC__) /* FIXME: || defined (ICC_whatever) */ +#if defined (__GNUC__) && (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) __sync_synchronize (); +#elif defined(__APPLE__) + OSMemoryBarrier (); +#elif defined(__powerpc__) + asm volatile ("sync":::"memory"); +#elif defined(__i386__) + asm volatile ("mfence":::"memory"); #elif defined (LIBVLC_USE_PTHREAD) static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock (&lock); @@ -589,12 +597,6 @@ static inline void barrier (void) #define vlc_thread_set_priority( P_THIS, PRIORITY ) \ __vlc_thread_set_priority( VLC_OBJECT(P_THIS), __FILE__, __LINE__, PRIORITY ) -/***************************************************************************** - * vlc_thread_ready: tell the parent thread we were successfully spawned - *****************************************************************************/ -#define vlc_thread_ready( P_THIS ) \ - __vlc_thread_ready( VLC_OBJECT(P_THIS) ) - /***************************************************************************** * vlc_thread_join: wait until a thread exits *****************************************************************************/