diff --git a/emper/Fibril.hpp b/emper/Fibril.hpp
index 606ebd5484a056a8e955a5d5aef8c9b6494323c2..2be6c341da98978db544e6bfb31600aa30fa96b7 100644
--- a/emper/Fibril.hpp
+++ b/emper/Fibril.hpp
@@ -300,8 +300,10 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 		auto fork_func = [](ARGs... args, Fibril * fr, RET * ret, RET(*fun)(PARs...))
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
-			fr->runtime.scheduler.pushBottom(*fr);
+			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
 			*ret = fun(args...);
+			if (!pushed) [[unlikely]]
+				return;
 			fr->checkContinuationState();
 		};
 		membar(fork_func(args..., this, ret, fun));
@@ -312,8 +314,10 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 		auto fork_func = [](ARGs... args, Fibril * fr, void (*fun)(PARs...))
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
-			fr->runtime.scheduler.pushBottom(*fr);
+			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
 			fun(args...);
+			if (!pushed) [[unlikely]]
+				return;
 			fr->checkContinuationState();
 		};
 		membar(fork_func(args..., this, fun));
@@ -324,8 +328,10 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 		auto fork_func = [](Fibril * fr, std::function<T> fun, ARGs... args)
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
-			fr->runtime.scheduler.pushBottom(*fr);
+			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
 			fun(args...);
+			if (!pushed) [[unlikely]]
+				return;
 			fr->checkContinuationState();
 		};
 		membar(fork_func(this, fun, args...));