bool dynamic;
union
{
- bool locked;
+ struct
+ {
+ bool locked;
+ unsigned long contention;
+ };
CRITICAL_SECTION mutex;
};
} vlc_mutex_t;
-#define VLC_STATIC_MUTEX { false, { false } }
+#define VLC_STATIC_MUTEX { false, { { false, 0 } } }
typedef HANDLE vlc_cond_t;
typedef HANDLE vlc_sem_t;
vlc_mutex_lock (&super_mutex);
while (p_mutex->locked)
- vlc_cond_wait (&super_mutex, &super_variable);
+ {
+ p_mutex->contention++;
+ vlc_cond_wait (&super_variable, &super_mutex);
+ p_mutex->contention--;
+ }
p_mutex->locked = true;
vlc_mutex_unlock (&super_mutex);
return;
vlc_mutex_lock (&super_mutex);
assert (p_mutex->locked);
p_mutex->locked = false;
- vlc_cond_signal (&super_variable);
+ if (p_mutex->contention)
+ vlc_cond_broadcast (&super_variable);
vlc_mutex_unlock (&super_mutex);
return;
}