Browse Source

Merge pull request #5327 from nubunto/fix/pool-join-hangs

fix: pool_join hangs if no threads are started
Jeroen van Rijn 2 months ago
parent
commit
795ceec2cd
1 changed files with 14 additions and 0 deletions
  1. 14 0
      core/thread/thread_pool.odin

+ 14 - 0
core/thread/thread_pool.odin

@@ -120,6 +120,20 @@ pool_join :: proc(pool: ^Pool) {
 
 	yield()
 
+	unstarted_count: int
+	for t in pool.threads {
+		flags := intrinsics.atomic_load(&t.flags)
+		if .Started not_in flags {
+			unstarted_count += 1
+		}
+	}
+
+	// most likely the user forgot to call `pool_start`
+	// exit here, so we don't hang forever
+	if len(pool.threads) == unstarted_count {
+		return
+	}
+
 	started_count: int
 	for started_count < len(pool.threads) {
 		started_count = 0