diff --git a/emper/strategies/laws/LawsScheduler.cpp b/emper/strategies/laws/LawsScheduler.cpp index 394e8c1a066220149b692787a77ca6869aeb7815..5e605992e19661985422745fcc0328bb058abaaa 100644 --- a/emper/strategies/laws/LawsScheduler.cpp +++ b/emper/strategies/laws/LawsScheduler.cpp @@ -3,6 +3,8 @@ #include "Common.hpp" #include "Runtime.hpp" +#define EMPER_OVERFLOW_QUEUE + thread_local adt::MpscQueue<Fiber> priorityQueue; thread_local LawsScheduler::WsQueue<LawsScheduler::QUEUE_SIZE> LawsScheduler::queue; @@ -34,7 +36,11 @@ void LawsScheduler::schedule(Fiber& fiber) { } bool pushed = queue.pushBottom(&fiber); if (unlikely(!pushed)) { - abort(); +#ifdef EMPER_OVERFLOW_QUEUE + priorityQueue.enqueue(&fiber); +#else + ABORT("Could not push fiber " << &fiber << " into queue"); +#endif } }