mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 22:58:46 +00:00
Clarify ThreadPool interface; Move import_mutex guarding to just the string set
This commit is contained in:
+6
-8
@@ -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) {
|
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");
|
String const FILE_EXT = str_lit(".odin");
|
||||||
|
|
||||||
mutex_lock(&p->import_mutex);
|
MUTEX_GUARD_BLOCK(&p->import_mutex) {
|
||||||
defer (mutex_unlock(&p->import_mutex));
|
if (string_set_exists(&p->imported_files, path)) {
|
||||||
|
return nullptr;
|
||||||
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);
|
AstPackage *pkg = gb_alloc_item(permanent_allocator(), AstPackage);
|
||||||
pkg->kind = kind;
|
pkg->kind = kind;
|
||||||
@@ -4991,8 +4989,8 @@ gb_internal AstPackage *try_add_import_path(Parser *p, String const &path, Strin
|
|||||||
fi.is_dir = false;
|
fi.is_dir = false;
|
||||||
|
|
||||||
pkg->is_single_file = true;
|
pkg->is_single_file = true;
|
||||||
parser_add_file_to_process(p, pkg, fi, pos);
|
|
||||||
parser_add_package(p, pkg);
|
parser_add_package(p, pkg);
|
||||||
|
parser_add_file_to_process(p, pkg, fi, pos);
|
||||||
return pkg;
|
return pkg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,25 @@
|
|||||||
// thread_pool.cpp
|
// thread_pool.cpp
|
||||||
|
|
||||||
|
struct WorkerTask;
|
||||||
|
struct ThreadPool;
|
||||||
|
|
||||||
#define WORKER_TASK_PROC(name) isize name(void *data)
|
#define WORKER_TASK_PROC(name) isize name(void *data)
|
||||||
typedef WORKER_TASK_PROC(WorkerTaskProc);
|
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 {
|
struct WorkerTask {
|
||||||
WorkerTask * next;
|
WorkerTask * next;
|
||||||
WorkerTaskProc *do_work;
|
WorkerTaskProc *do_work;
|
||||||
void * data;
|
void * data;
|
||||||
|
ThreadPool * pool;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
struct ThreadPool {
|
struct ThreadPool {
|
||||||
gbAllocator allocator;
|
gbAllocator allocator;
|
||||||
BlockingMutex mutex;
|
BlockingMutex mutex;
|
||||||
@@ -89,6 +100,7 @@ gb_internal bool thread_pool_add_task(ThreadPool *pool, WorkerTaskProc *proc, vo
|
|||||||
GB_PANIC("Out of memory");
|
GB_PANIC("Out of memory");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
task->pool = pool;
|
||||||
task->do_work = proc;
|
task->do_work = proc;
|
||||||
task->data = data;
|
task->data = data;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user