thread: add generic futex-based muteces
authorRémi Denis-Courmont <remi@remlab.net>
Wed, 19 Feb 2020 19:09:06 +0000 (21:09 +0200)
committerRémi Denis-Courmont <remi@remlab.net>
Fri, 21 Feb 2020 17:15:24 +0000 (19:15 +0200)
commit0a8a53335b5770cd1acaa612b495bdbc41a8d1ee
treedb0d69ed9cfc8338a62ddb0f0f4d6083570dcdcc
parentad6983eef48be550213e3b61f3b44ea1f43adf4a
thread: add generic futex-based muteces

This provides a common implementation of fast (non-debug),
error-checking (debug) and recursive muteces on top of
vlc_atomic_wait() and vlc_atomic_notify_one(), using Drepper's tristate
mutex algorithm.

Benefits of this implementation include:
 - Error checking is supported on all platforms (including Windows).
 - Initialization can never fail, is not subject to aborts.
 - Destruction is a no-op and can be removed altogether.
 - Static muteces do not leak or need kludges.
 - Ownership can be checked directly without the mutex mark system.
 - Non-ownership can be checked in assertion.

Because the player code uses the same vlc_mutex_t typedef for both
non-recursive and recursive usages, disentanglement is not possible.
This patchset thus supports both semantics together as before.
include/vlc_threads.h
src/misc/threads.c