mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-02 03:02:37 +00:00
Clarify ThreadPool interface; Move import_mutex guarding to just the string set
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user