summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibThreading
AgeCommit message (Collapse)Author
2022-01-25LibThreading: Invoke BackgroundAction completions on origin event loopAndreas Kling
We now capture the origin thread's current event loop when setting up a BackgroundAction and then invoke the on_complete callback on that same event loop.
2022-01-23LibThreading: Introduce MutexProtected generic synchronization primitivekleines Filmröllchen
MutexProtected mirrors the identically-named Kernel primitive and can be used to synchronize access to any object that might not be thread safe on its own. Synchronization is done with a simple mutex, so access to a MutexProtected object is potentially blocking. Mutex now has an internal nesting variable which is there to harden it against lock-unlock ordering issues (e.g. double unlocking).
2022-01-14Everywhere: Use my new serenityos.org e-mail :^)kleines Filmröllchen
2021-11-02LibThreading: Remove redundant methodBen Wiederhake
2021-10-06LibThreading: Add missing headers to Mutex.hBen Wiederhake
2021-09-16LibThreading: Use default instead of an empty constructor/destructorBrian Gianforcaro
Default implementations allow for more optimizations. See: https://pvs-studio.com/en/docs/warnings/v832/
2021-09-16LibThreading: Neither Mutex or MutexLocker should be movable / copyableBrian Gianforcaro
2021-09-12LibThreading: Add ConditionVariable wrapperkleines Filmröllchen
ConditionVariable is a thin wrapper over the pthread_cond_* APIs, just as Mutex is a wrapper over pthread_mutex. Because ConditionVariable might want to wait on a high-level Mutex, it needs to be friends with it.
2021-09-02LibCore+Userland: Implement Core::deferred_invokesin-ack
Core::deferred_invoke is a way of executing an action after previously queued events have been processed. It removes the requirement of having/being a Core::Object subclass in order to defer invocation through Core::Object::deferred_invoke. Core::Object::deferred_invoke now delegates to Core::deferred_invoke. The version with the Object& argument is still present but will be removed in the following commits. This commit additionally fixes a new places where the DeferredInvocationEvent was dispatched to the event loop directly, and replaces them with the Core::deferred_invoke equivalent.
2021-07-12Revert "LibThreading: Fix BackgroundAction result use-after-free"Andreas Kling
This reverts commit b2e6088bff209e8bbb838cc86233e7d3f24ed650. This was a speculative fix that ended up not fixing the issue.
2021-07-09LibThreading: Rename Lock => MutexAndreas Kling
2021-07-09LibThreading: Remove unused "Lockable" classAndreas Kling
2021-07-07LibThreading: Use a condvar to signal the BackgroundAction threadAndreas Kling
Now that pthread_cond_t works correctly thanks to Sergey, we can use them to wake up the BackgroundAction worker thread instead of making a Unix pipe. :^)
2021-07-06LibThread: Fix formatting that was broken by the previous commitGunnar Beutner
2021-07-06LibThreading: Fix building the library on macOSGunnar Beutner
2021-07-05LibThreading: Reimplement Lock in terms of pthread_mutex_tAndreas Kling
This class was previously a spinlock that would call sys$donate() to donate its timeslice to whichever thread was holding the lock. Now that pthread_mutex_t has a fast path, let's implement Lock on top of that instead and get rid of the last remaining user of sys$donate().
2021-07-05LibThreading: Fix BackgroundAction result use-after-freeTom
We need to move the result out of the BackgroundAction object before posting the completion callback as there is a chance the BackgroundAction instance gets freed before the event loop runs our callback. Fixes #7641
2021-07-04LibThreading: Wake up the background worker thread when there's workAndreas Kling
The worker thread used for BackgroundAction was going to sleep for 1 second at a time (when there was nothing to do.) This made using background actions for anything interactive quite unresponsive since you had to wait up to 1 second before it even started on your task. We now use a simple Unix pipe to signal the worker thread that a new work item is available. This makes Assistant way more responsive when typing. :^)
2021-07-02LibThreading: Add new detach() API to ThreadSpencer Dixon
Sometimes you don't care about `joining()` the result of a thread. The underlying pthread implementation already existed for detaching and now we expose it to the higher level API.
2021-07-02LibThreading: Add ability to cancel ongoing BackgroundActionsSpencer Dixon
Handlers of the BackgroundAction are responsible for checking if the action has been cancelled and returning early.
2021-05-22Userland: Rename LibThread => LibThreadingAndreas Kling
Also rename the "LibThread" namespace to "Threading"