#define vlc_mutex_lock( P_MUTEX ) \
__vlc_mutex_lock( __FILE__, __LINE__, P_MUTEX )
-#if defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#if defined(LIBVLC_USE_PTHREAD)
static inline unsigned long int CAST_PTHREAD_TO_INT (pthread_t th)
{
union { pthread_t th; unsigned long int i; } v = { };
i_result = acquire_sem( p_mutex->lock );
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
# define vlc_assert_locked( m ) \
assert (pthread_mutex_lock (&((m)->mutex)) == EDEADLK)
return B_OK;
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_mutex_unlock( &p_mutex->mutex );
if ( i_result )
{
i_result = 0;
}
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_result = pthread_cond_signal( &p_condvar->cond );
if ( i_result )
{
vlc_mutex_lock( p_mutex );
i_result = 0;
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
# ifdef DEBUG
/* In debug mode, timeout */
#elif defined( HAVE_KERNEL_SCHEDULER_H )
# error Unimplemented
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
lldiv_t d = lldiv( deadline, 1000000 );
struct timespec ts = { d.quot, d.rem * 1000 };
#elif defined( UNDER_CE ) || defined( WIN32 )
i_ret = ( TlsSetValue( p_tls->handle, p_value ) != 0 );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
i_ret = pthread_setspecific( p_tls->handle, p_value );
#endif
#elif defined( UNDER_CE ) || defined( WIN32 )
p_ret = TlsGetValue( p_tls->handle );
-#elif defined( PTHREAD_COND_T_IN_PTHREAD_H )
+#elif defined(LIBVLC_USE_PTHREAD)
p_ret = pthread_getspecific( p_tls->handle );
#endif
{
return pthread_spin_destroy (&spin->spin);
}
+
+#elif defined( WIN32 )
+
+typedef CRITICAL_SECTION vlc_spinlock_t;
+
+/**
+ * Initializes a spinlock.
+ */
+static inline int vlc_spin_init (vlc_spinlock_t *spin)
+{
+ return !InitializeCriticalSectionAndSpinCount(spin, 4000);
+}
+
+/**
+ * Acquires a spinlock.
+ */
+static inline int vlc_spin_lock (vlc_spinlock_t *spin)
+{
+ EnterCriticalSection(spin);
+ return 0;
+}
+
+/**
+ * Releases a spinlock.
+ */
+static inline int vlc_spin_unlock (vlc_spinlock_t *spin)
+{
+ LeaveCriticalSection(spin);
+ return 0;
+}
+
+/**
+ * Deinitializes a spinlock.
+ */
+static inline int vlc_spin_destroy (vlc_spinlock_t *spin)
+{
+ DeleteCriticalSection(spin);
+ return 0;
+}
+
+
#else
+
+
/* Fallback to plain mutexes if spinlocks are not available */
typedef vlc_mutex_t vlc_spinlock_t;