From 07e63caa91ff2ead340a6010918ca15ee85bf7e5 Mon Sep 17 00:00:00 2001
From: Florian Schmaus <flow@cs.fau.de>
Date: Sat, 5 Mar 2022 10:13:02 +0100
Subject: [PATCH] Rename Fibril fork/join to spawn/sync

To avoid confusing the fork with a heavyweight (Unix) fork(), we use
spawn/sync instead of fork/join in Fibril.
---
 emper/Fibril.hpp                              | 36 +++++++++----------
 emper/io/io.cpp                               |  4 +--
 ...nuationStealingAndPrivateSemaphoreTest.cpp | 20 +++++------
 .../CppContinuationApiTest.cpp                |  4 +--
 tests/continuation-stealing/FibFibrilTest.cpp |  4 +--
 5 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/emper/Fibril.hpp b/emper/Fibril.hpp
index 2be6c341..de43069e 100644
--- a/emper/Fibril.hpp
+++ b/emper/Fibril.hpp
@@ -227,7 +227,7 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 		LOGD("constructed " << *this);
 	}
 
-	~Fibril() override { join(); }
+	~Fibril() override { sync(); }
 
 	auto asFibrilIfPossible() -> Fibril* override { return this; }
 
@@ -252,7 +252,7 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 	// ContextManager::start() invokes tryResumeFibril(uint32_t), let's be friends.
 	friend void ContextManager::start();
 
-	__attribute__((noinline, hot, optimize(3))) void doJoin() {
+	__attribute__((noinline, hot, optimize(3))) void doSync() {
 		cont.ip = __builtin_return_address(0);
 
 		toResume = this;
@@ -296,8 +296,8 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 
  public:
 	template <class RET, class... PARs, class... ARGs>
-	inline __attribute__((always_inline)) void fork(RET* ret, RET (*fun)(PARs...), ARGs... args) {
-		auto fork_func = [](ARGs... args, Fibril * fr, RET * ret, RET(*fun)(PARs...))
+	inline __attribute__((always_inline)) void spawn(RET* ret, RET (*fun)(PARs...), ARGs... args) {
+		auto spawn_func = [](ARGs... args, Fibril * fr, RET * ret, RET(*fun)(PARs...))
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
 			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
@@ -306,12 +306,12 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 				return;
 			fr->checkContinuationState();
 		};
-		membar(fork_func(args..., this, ret, fun));
+		membar(spawn_func(args..., this, ret, fun));
 	}
 
 	template <class... PARs, class... ARGs>
-	inline __attribute__((always_inline)) void fork(void (*fun)(PARs...), ARGs... args) {
-		auto fork_func = [](ARGs... args, Fibril * fr, void (*fun)(PARs...))
+	inline __attribute__((always_inline)) void spawn(void (*fun)(PARs...), ARGs... args) {
+		auto spawn_func = [](ARGs... args, Fibril * fr, void (*fun)(PARs...))
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
 			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
@@ -320,12 +320,12 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 				return;
 			fr->checkContinuationState();
 		};
-		membar(fork_func(args..., this, fun));
+		membar(spawn_func(args..., this, fun));
 	}
 
 	template <class T, class... ARGs>
-	inline __attribute__((always_inline)) void fork(std::function<T> fun, ARGs... args) {
-		auto fork_func = [](Fibril * fr, std::function<T> fun, ARGs... args)
+	inline __attribute__((always_inline)) void spawn(std::function<T> fun, ARGs... args) {
+		auto spawn_func = [](Fibril * fr, std::function<T> fun, ARGs... args)
 				__attribute__((noinline, hot, optimize(3))) {
 			fr->cont.ip = __builtin_return_address(0);
 			bool pushed = fr->runtime.scheduler.pushBottom(*fr);
@@ -334,28 +334,28 @@ class Fibril : public AbstractFiber, public Logger<LogSubsystem::FIBRIL> {
 				return;
 			fr->checkContinuationState();
 		};
-		membar(fork_func(this, fun, args...));
+		membar(spawn_func(this, fun, args...));
 	}
 
-	inline __attribute__((always_inline)) void join() {
+	inline __attribute__((always_inline)) void sync() {
 		if constexpr (LOCKED_CONTINUATION_STEALING) {
-			joinLocked();
+			syncLocked();
 		} else {
-			joinWaitFree();
+			syncWaitFree();
 		}
 	}
 
  private:
-	inline __attribute__((always_inline)) void joinLocked() {
+	inline __attribute__((always_inline)) void syncLocked() {
 		if (activeChildrenCount == 0) return;
 
-		membar(doJoin());
+		membar(doSync());
 	}
 
-	inline __attribute__((always_inline)) void joinWaitFree() {
+	inline __attribute__((always_inline)) void syncWaitFree() {
 		if (reverseStealCount == 0) return;
 
-		membar(doJoin());
+		membar(doSync());
 
 		reverseStealCount = 0;
 		if constexpr (UNMAP_STACKS) {
diff --git a/emper/io/io.cpp b/emper/io/io.cpp
index a58a29fb..a0ea6b48 100644
--- a/emper/io/io.cpp
+++ b/emper/io/io.cpp
@@ -72,11 +72,11 @@ emper_fibril void fibril_recursive_directory_walk(
 		// become invalid at the end of the iteration.
 		const fs::directory_entry path = pathRef;
 		if (filter(path)) {
-			fibril.fork(fn, path);
+			fibril.spawn(fn, path);
 		}
 
 		if (pathRef.is_directory()) {
-			fibril.fork(fibril_recursive_directory_walk, path, filter, fn);
+			fibril.spawn(fibril_recursive_directory_walk, path, filter, fn);
 		}
 	}
 }
diff --git a/tests/continuation-stealing/ContinuationStealingAndPrivateSemaphoreTest.cpp b/tests/continuation-stealing/ContinuationStealingAndPrivateSemaphoreTest.cpp
index 982b64bb..a9e136ce 100644
--- a/tests/continuation-stealing/ContinuationStealingAndPrivateSemaphoreTest.cpp
+++ b/tests/continuation-stealing/ContinuationStealingAndPrivateSemaphoreTest.cpp
@@ -9,35 +9,35 @@
 emper_fibril static void waitOnBps(BPS* bps) { bps->wait(); }
 
 // NOLINTNEXTLINE(clang-diagnostic-unknown-attributes)
-emper_fibril static void forkFirstThenSignal() {
+emper_fibril static void spawnFirstThenSignal() {
 	Fibril fibril;
 	BPS bps;
 
-	fibril.fork(waitOnBps, &bps);
+	fibril.spawn(waitOnBps, &bps);
 
 	bps.signal();
 
-	fibril.join();
+	fibril.sync();
 }
 
 // NOLINTNEXTLINE(clang-diagnostic-unknown-attributes)
-emper_fibril static void signalFirstThenFork() {
+emper_fibril static void signalFirstThenSpawn() {
 	Fibril fibril;
 	BPS bps;
 
 	bps.signal();
 
-	fibril.fork(waitOnBps, &bps);
+	fibril.spawn(waitOnBps, &bps);
 
-	fibril.join();
+	fibril.sync();
 }
 
 void emperTest() {
-	std::cout << "####    Fork first, then signal\n";
-	forkFirstThenSignal();
+	std::cout << "####    Spawn first, then signal\n";
+	spawnFirstThenSignal();
 
-	std::cout << "####    Signal first, then fork\n";
-	signalFirstThenFork();
+	std::cout << "####    Signal first, then spawn\n";
+	signalFirstThenSpawn();
 
 	std::cout << "####    Return from emperTest()\n";
 }
diff --git a/tests/continuation-stealing/CppContinuationApiTest.cpp b/tests/continuation-stealing/CppContinuationApiTest.cpp
index c4826dfc..a6ad47a4 100644
--- a/tests/continuation-stealing/CppContinuationApiTest.cpp
+++ b/tests/continuation-stealing/CppContinuationApiTest.cpp
@@ -15,10 +15,10 @@ emper_fibril void emperTest() {
 	Fibril fibril;
 
 	for (unsigned int i = 0; i < COUNT; ++i) {
-		fibril.fork(increaseCounterByOne);
+		fibril.spawn(increaseCounterByOne);
 	}
 
-	fibril.join();
+	fibril.sync();
 
 	if (counter != COUNT) {
 		exit(EXIT_FAILURE);
diff --git a/tests/continuation-stealing/FibFibrilTest.cpp b/tests/continuation-stealing/FibFibrilTest.cpp
index 665e3764..81ae91d9 100644
--- a/tests/continuation-stealing/FibFibrilTest.cpp
+++ b/tests/continuation-stealing/FibFibrilTest.cpp
@@ -27,11 +27,11 @@ emper_fibril static auto fib(uint64_t n) -> uint64_t {
 	Fibril fibril;
 	uint64_t a, b;
 
-	fibril.fork(&a, fib, n - 1);
+	fibril.spawn(&a, fib, n - 1);
 
 	b = fib(n - 2);
 
-	fibril.join();
+	fibril.sync();
 
 	return a + b;
 }
-- 
GitLab