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

Win32: fix previous commit plus small optimization

parent c72c34ea
...@@ -127,11 +127,15 @@ typedef struct ...@@ -127,11 +127,15 @@ typedef struct
bool dynamic; bool dynamic;
union union
{ {
bool locked; struct
{
bool locked;
unsigned long contention;
};
CRITICAL_SECTION mutex; CRITICAL_SECTION mutex;
}; };
} vlc_mutex_t; } vlc_mutex_t;
#define VLC_STATIC_MUTEX { false, { false } } #define VLC_STATIC_MUTEX { false, { { false, 0 } } }
typedef HANDLE vlc_cond_t; typedef HANDLE vlc_cond_t;
typedef HANDLE vlc_sem_t; typedef HANDLE vlc_sem_t;
......
...@@ -195,7 +195,11 @@ void vlc_mutex_lock (vlc_mutex_t *p_mutex) ...@@ -195,7 +195,11 @@ void vlc_mutex_lock (vlc_mutex_t *p_mutex)
vlc_mutex_lock (&super_mutex); vlc_mutex_lock (&super_mutex);
while (p_mutex->locked) 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; p_mutex->locked = true;
vlc_mutex_unlock (&super_mutex); vlc_mutex_unlock (&super_mutex);
return; return;
...@@ -233,7 +237,8 @@ void vlc_mutex_unlock (vlc_mutex_t *p_mutex) ...@@ -233,7 +237,8 @@ void vlc_mutex_unlock (vlc_mutex_t *p_mutex)
vlc_mutex_lock (&super_mutex); vlc_mutex_lock (&super_mutex);
assert (p_mutex->locked); assert (p_mutex->locked);
p_mutex->locked = false; p_mutex->locked = false;
vlc_cond_signal (&super_variable); if (p_mutex->contention)
vlc_cond_broadcast (&super_variable);
vlc_mutex_unlock (&super_mutex); vlc_mutex_unlock (&super_mutex);
return; 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