- Dec 18, 2020
-
-
Florian Fischer authored
-
Florian Schmaus authored
[Runtime] don't allocate threads array twice See merge request !58
-
- Dec 17, 2020
-
-
Florian Schmaus authored
handle UnboundedBlockingMpscQueue spurious wake-ups Closes #4 See merge request !57
-
Florian Schmaus authored
Add meson option for scheduling strategy and according CI jobs See merge request !53
-
Florian Fischer authored
A spurious wake-up can be produced by the new UnblockOnMainActorTest which triggers the assert(!mpscQueue.empty()) in UnboundedBlockingMpscQueue::get. Those spurious wake-ups are possible because the push and wake-up pair in UnboundedBlockingMpscQueue::put are not atomic. The following sequence diagram demonstrates a spurious wake-up: T1 T2 Q . . { } put(e) . { } push 54-57 . {e} . get() {e} . consume e { } . . { } . get() { } . block { } unblock . { } . . { } . wakeup { } . . { } X assert(!queue.Empty()) To deal with spurious wake-ups we recheck the wake-up condition (a non empty queue) and block again if we find it empty. We assume spurious wake-ups are rare because it was difficult to reproduce them even with a dedicated Test (the new UnblockOnMainActorTest) therefore we declare the empty queue branch as unlikely. Fixes #4.
-
Florian Fischer authored
the threads array is initialized using the Runtime::Runtime initializer list and afterwards again in the constructor.
-
Florian Schmaus authored
Co-authored-by:
Florian Fischer <florian.fl.fischer@fau.de>
-
- Dec 14, 2020
-
-
Florian Schmaus authored
Various small changes See merge request !55
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Schmaus authored
Fix memory leak: Ensure that the current fiber is recycled in discardAndResume() See merge request !51
-
Florian Schmaus authored
Improve code readability of UnboundedBlockingMpscQueue See merge request !52
-
Florian Schmaus authored
The current Fiber is now always stored in the context, not just on debug builds. This also means that we can remove the currentFiber thread local variable, as using only a thread local storage would yield wrong results in case a blocked context is resumed on another worker thread.
-
Florian Schmaus authored
[build] Switch to C++2a See merge request !47
-
Florian Schmaus authored
Improve debug output, create Worker class See merge request !42
-
- Dec 13, 2020
-
-
Florian Schmaus authored
-
Florian Schmaus authored
-
Florian Schmaus authored
There is no need to call load() on std::atomic if the default memory order is used.
-
- Dec 10, 2020
-
-
Florian Schmaus authored
[doc] make doxygen search for input recursively See merge request !50
-
Florian Schmaus authored
-
Florian Fischer authored
If RECURSIVE is set to NO doxygen will only process files in emper/ when set to YES it will see all files reachable from emper/.
-
Florian Schmaus authored
We are unable to switch to C++20 until https://github.com/mesonbuild/meson/issues/8084 is fixed.
-
Florian Schmaus authored
Add emper::getFullVersion() See merge request !49
-
- Dec 09, 2020
-
-
Florian Schmaus authored
This also solves a dependency declaration issue in WorkerSleepExample: Prior to this change, a clean build could potentially result in ninja -C build ninja: Entering directory `build' [13/57] Compiling C++ object apps/worker_sleep_example.p/WorkerSleepExample.cpp.o FAILED: apps/worker_sleep_example.p/WorkerSleepExample.cpp.o ccache c++ -Iapps/worker_sleep_example.p -Iapps -I../apps -Iemper -I../emper -Iemper/include -I../emper/include -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -Wextra -Wpedantic -Werror -std=c++17 -O2 -g -Wno-non-virtual-dtor -MD -MQ apps/worker_sleep_example.p/WorkerSleepExample.cpp.o -MF apps/worker_sleep_example.p/WorkerSleepExample.cpp.o.d -o apps/worker_sleep_example.p/WorkerSleepExample.cpp.o -c ../apps/WorkerSleepExample.cpp ../apps/WorkerSleepExample.cpp:12:10: fatal error: emper-version.h: No such file or directory 12 | #include "emper-version.h" // for EMPER_FULL_VERSION | ^~~~~~~~~~~~~~~~~ compilation terminated. [17/57] Generating emper-version.h with a custom command ninja: build stopped: subcommand failed. make: *** [Makefile:23: build] Error 1 because worker_sleep_example_exec should have also depend on emper_version_h. However this is obviously error prone, as users easily forget to add this dependency. Instead we add emper::getFullVersion() which is part of the EMPER shared object (not just of a single header).
-
Florian Schmaus authored
Use lib::adt::LockedUnboundedQueue in Scheduler See merge request !45
-
Florian Schmaus authored
Re-use Runtime::getWorkerId() when possible See merge request !44
-
Florian Schmaus authored
Allow an actor to be startet from anywhere See merge request !43
-
Florian Schmaus authored
This class was previously unused, but can be used in Scheduler after minor modifcations.
-
Florian Fischer authored
-
Florian Fischer authored
-
Florian Schmaus authored
Runtime::getWorkerId() may be an expensive operation, hence re-use the result of the method when possible.
-
Florian Schmaus authored
-
Florian Schmaus authored
Schedule from anywhere See merge request !41
-
Florian Schmaus authored
-
Florian Schmaus authored
In debug builds, the schedule() method is now guarded by an assert(), as due to this change, the schedule() method will no longer work from everywhere. This also improves the worker sleep method.
-
- Dec 07, 2020
-
-
Florian Schmaus authored
This directory is used, for example, by clangd.
-
Florian Schmaus authored
-
- Dec 05, 2020
-
-
Florian Schmaus authored
[gitlab-ci] Bump CI container to flowdalic/debian-testing-dev:1.4 See merge request !40
-
Florian Schmaus authored
-
Florian Schmaus authored
-