Commit graph

6 commits

Author SHA1 Message Date
Jelle Raaijmakers
30580ed7e4 LibPthread: Initialize conditions with realtime clock
All the way back in commit 1670ee5aba, the default clock for
condition variables was set to `CLOCK_MONOTONIC`, because there was no
other clock available.

However, if a condition variable is initialized without any additional
attributes by an application, they sometimes assume that the absolute
time that is passed to e.g. `pthread_cond_timedwait` is actually based
on a realtime clock, as can be seen here in SDL2:

6f419bdf5f/src/thread/pthread/SDL_syscond.c (L99)

Additionally, the glibc implementation defaults to a realtime clock:

aac54dcd37/nptl/pthread_cond_init.c (L42)

...so we probably should do so as well :^)
2021-11-24 19:44:57 +01:00
Andreas Kling
4226b662cd Kernel+Userland: Remove global futexes
We only ever use private futexes, so it doesn't make sense to carry
around all the complexity required for global (cross-process) futexes.
2021-08-17 01:21:47 +02:00
Sergey Bugaev
65b0642dd0 LibC+LibPthread: Use FUTEX_PRIVATE_FLAG in more places
Performance go brrrrr
2021-07-07 17:08:40 +02:00
Sergey Bugaev
5aa629717e LibPthread: Fix some assertions 2021-07-06 17:25:34 +02:00
Sergey Bugaev
78f5c4a4c2 LibPthread: Fix ordering
It would be enough to use relaxed ordering here if it weren't for
the mutex, which we also need to store and retrieve. To ensure the
pthread_cond_broadcast() call sees the store, use release and acquire
as appropriate. Thankfully, both of these are on the slow paths.
2021-07-06 17:25:34 +02:00
Sergey Bugaev
00d8dbe739 LibPthread: Reimplement condition variables
This implementation features a fast path for pthread_cond_signal() and
pthread_cond_broadcast() for the case there's no thread waiting, and
does not exhibit the "thundering herd" issue in
pthread_cond_broadcast().

Fixes https://github.com/SerenityOS/serenity/issues/8432
2021-07-05 20:26:01 +02:00