Commit aac94890 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Win32: fix previous commit plus small optimization

parent c72c34ea
......@@ -126,12 +126,16 @@ typedef struct
{
bool dynamic;
union
{
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;
......
......@@ -195,7 +195,11 @@ void vlc_mutex_lock (vlc_mutex_t *p_mutex)
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;
......@@ -233,7 +237,8 @@ void vlc_mutex_unlock (vlc_mutex_t *p_mutex)
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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment