summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibThreading
AgeCommit message (Collapse)Author
2022-11-13LibThreading: Add thread priority controls to Threadkleines Filmröllchen
This exposes the now properly working pthread APIs on the higher level.
2022-11-01Everywhere: Mark dependencies of most targets as PRIVATETim Schumacher
Otherwise, we end up propagating those dependencies into targets that link against that library, which creates unnecessary link-time dependencies. Also included are changes to readd now missing dependencies to tools that actually need them.
2022-11-01Everywhere: Explicitly link all binaries against the LibC targetTim Schumacher
Even though the toolchain implicitly links against -lc, it does not know where it should get LibC from except for the sysroot. In the case of Clang this causes it to pick up the LibC stub instead, which might be slightly outdated and feature missing symbols. This is currently not an issue that manifests because we pass through the dependency on LibC and other libraries by accident, which causes CMake to link against the LibC target (instead of just the library), and thus points the linker at the build output directory. Since we are looking to fix that in the upcoming commits, let's make sure that everything will still be able to find the proper LibC first.
2022-10-31LibThreading: Set BackgroundAction's thread name correctlyZaggy1024
Previously, init() in BackgroundAction.cpp was calling Core::Object::set_name, which does not affect the displayed thread name which is displayed by the system monitor. This changes it to pass the name to the thread constructor.
2022-10-16LibThreading: Only set pthread name on SerenityAndrew Kaster
pthread_setname_np is a can of worms for portability. Linux, macOS, and the BSDs all do it differently. Also skip adding the tid as an inspectable Core::Object property on systems where pthread_t is known to be a pointer.
2022-10-10Everywhere: Replace uses of __serenity__ with AK_OS_SERENITYAndrew Kaster
Now that we have OS macros for essentially every supported OS, let's try to use them everywhere.
2022-07-22Everywhere: Prefix 'TYPEDEF_DISTINCT_ORDERED_ID' with 'AK_'Linus Groh
2022-07-22LibThreading: Add is_started state information to Threadkleines Filmröllchen
Users can now determine whether a thread has been started or not. A started thread might also have already terminated. Implementation note: We *could* detect this with pthread APIs maybe, but this is much simpler.
2022-07-19LibC: Remove the `LibPthread` interface targetTim Schumacher
2022-07-12Everywhere: Use default StringView constructor over nullptrsin-ack
While null StringViews are just as bad, these prevent the removal of StringView(char const*) as that constructor accepts a nullptr. No functional changes.
2022-07-12Everywhere: Add sv suffix to strings relying on StringView(char const*)sin-ack
Each of these strings would previously rely on StringView's char const* constructor overload, which would call __builtin_strlen on the string. Since we now have operator ""sv, we can replace these with much simpler versions. This opens the door to being able to remove StringView(char const*). No functional changes.
2022-03-13Libraries: Use default constructors/destructors in LibThreadingLenny Maiorani
https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#cother-other-default-operation-rules "The compiler is more likely to get the default semantics right and you cannot implement these functions better than the compiler."
2022-02-13LibCore: Allow event loops on other threads to wake upkleines Filmröllchen
Because the wake pipe is thread-local, it was previously not possible to wake an event loop across a thread. Therefore, this commit rearchitects event loop waking by making the wake function a member of the event loop itself and having it keep a pointer to its thread's wake pipe. The global wake() function calls wake on the current thread's event loop. This also fixes a bug in BackgroundAction: it should wake the event loop it was created on, instead of the current thread's event loop.
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"