Browse Source

Clarify ThreadPool interface; Move `import_mutex` guarding to just the string set

gingerBill 2 years ago
parent
commit
0edda2bea7
2 changed files with 18 additions and 8 deletions
  1. 6 8
      src/parser.cpp
  2. 12 0
      src/thread_pool.cpp

+ 6 - 8
src/parser.cpp

@@ -4966,14 +4966,12 @@ gb_internal void parser_add_foreign_file_to_process(Parser *p, AstPackage *pkg,
 gb_internal AstPackage *try_add_import_path(Parser *p, String const &path, String const &rel_path, TokenPos pos, PackageKind kind = Package_Normal) {
 	String const FILE_EXT = str_lit(".odin");
 
-	mutex_lock(&p->import_mutex);
-	defer (mutex_unlock(&p->import_mutex));
-
-	if (string_set_exists(&p->imported_files, path)) {
-		return nullptr;
+	MUTEX_GUARD_BLOCK(&p->import_mutex) {
+		if (string_set_exists(&p->imported_files, path)) {
+			return nullptr;
+		}
+		string_set_add(&p->imported_files, path);
 	}
-	string_set_add(&p->imported_files, path);
-
 
 	AstPackage *pkg = gb_alloc_item(permanent_allocator(), AstPackage);
 	pkg->kind = kind;
@@ -4991,8 +4989,8 @@ gb_internal AstPackage *try_add_import_path(Parser *p, String const &path, Strin
 		fi.is_dir = false;
 
 		pkg->is_single_file = true;
-		parser_add_file_to_process(p, pkg, fi, pos);
 		parser_add_package(p, pkg);
+		parser_add_file_to_process(p, pkg, fi, pos);
 		return pkg;
 	}
 

+ 12 - 0
src/thread_pool.cpp

@@ -1,14 +1,25 @@
 // thread_pool.cpp
 
+struct WorkerTask;
+struct ThreadPool;
+
 #define WORKER_TASK_PROC(name) isize name(void *data)
 typedef WORKER_TASK_PROC(WorkerTaskProc);
 
+gb_internal void thread_pool_init(ThreadPool *pool, gbAllocator const &a, isize thread_count, char const *worker_name);
+gb_internal void thread_pool_destroy(ThreadPool *pool);
+gb_internal bool thread_pool_add_task(ThreadPool *pool, WorkerTaskProc *proc, void *data);
+gb_internal void thread_pool_wait(ThreadPool *pool);
+
+
 struct WorkerTask {
 	WorkerTask *    next;
 	WorkerTaskProc *do_work;
 	void *          data;
+	ThreadPool *    pool;
 };
 
+
 struct ThreadPool {
 	gbAllocator   allocator;
 	BlockingMutex mutex;
@@ -89,6 +100,7 @@ gb_internal bool thread_pool_add_task(ThreadPool *pool, WorkerTaskProc *proc, vo
 		GB_PANIC("Out of memory");
 		return false;
 	}
+	task->pool = pool;
 	task->do_work = proc;
 	task->data = data;