mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Cleaned up parse_packages and the worker proc.
This commit is contained in:
+12
-38
@@ -4681,14 +4681,13 @@ skip:
|
|||||||
return ParseFile_None;
|
return ParseFile_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 1
|
|
||||||
struct ParserWorkerThreadData {
|
struct ParserWorkerThreadData {
|
||||||
Parser *parser;
|
Parser *parser;
|
||||||
|
|
||||||
gbSemaphore resume_work; //NOTE(thebirk): Use to signal that the worker thead has a new work to do
|
|
||||||
ParseFileError err;
|
ParseFileError err;
|
||||||
|
|
||||||
gbMutex lock; //NOTE(thebirk): All variables below are locked by this mutex
|
gbSemaphore resume_work;
|
||||||
|
gbMutex lock;
|
||||||
|
|
||||||
bool error_available;
|
bool error_available;
|
||||||
bool is_working;
|
bool is_working;
|
||||||
bool should_exit;
|
bool should_exit;
|
||||||
@@ -4724,18 +4723,6 @@ GB_THREAD_PROC(parse_worker_file_proc) {
|
|||||||
|
|
||||||
//GB_PANIC("A worker thread should not be able to reach the end!!!");
|
//GB_PANIC("A worker thread should not be able to reach the end!!!");
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
GB_THREAD_PROC(parse_worker_file_proc) {
|
|
||||||
if (thread == nullptr) return 0;
|
|
||||||
auto *p = cast(Parser *)thread->user_data;
|
|
||||||
isize index = thread->user_index;
|
|
||||||
gb_mutex_lock(&p->file_add_mutex);
|
|
||||||
auto file_to_process = p->files_to_process[index];
|
|
||||||
gb_mutex_unlock(&p->file_add_mutex);
|
|
||||||
ParseFileError err = process_imported_file(p, file_to_process);
|
|
||||||
return cast(isize)err;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ParseFileError parse_packages(Parser *p, String init_filename) {
|
ParseFileError parse_packages(Parser *p, String init_filename) {
|
||||||
GB_ASSERT(init_filename.text[init_filename.len] == 0);
|
GB_ASSERT(init_filename.text[init_filename.len] == 0);
|
||||||
@@ -4767,6 +4754,8 @@ ParseFileError parse_packages(Parser *p, String init_filename) {
|
|||||||
isize volatile curr_import_index = 0;
|
isize volatile curr_import_index = 0;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
//NOTE(thebirk): Leaving this piece of code behind if it turns out we need it, yes I know git exists
|
||||||
|
|
||||||
isize initial_file_count = p->files_to_process.count;
|
isize initial_file_count = p->files_to_process.count;
|
||||||
// NOTE(bill): Make sure that these are in parsed in this order
|
// NOTE(bill): Make sure that these are in parsed in this order
|
||||||
for (isize i = 0; i < initial_file_count; i++) {
|
for (isize i = 0; i < initial_file_count; i++) {
|
||||||
@@ -4803,8 +4792,11 @@ ParseFileError parse_packages(Parser *p, String init_filename) {
|
|||||||
for_array(i, worker_threads) {
|
for_array(i, worker_threads) {
|
||||||
gbThread *t = &worker_threads[i];
|
gbThread *t = &worker_threads[i];
|
||||||
gb_thread_init(t);
|
gb_thread_init(t);
|
||||||
//char buffer[64];
|
//NOTE(thebirk): This crashes on linux. In addition to that the method used on windows does
|
||||||
//gb_snprintf(buffer, 64, "Parser Worker #%ll", i);
|
// not get picked up by a lot of tools look into using SetThreadDescription
|
||||||
|
// when running on new enough windows 10 builds
|
||||||
|
//char buffer[32];
|
||||||
|
//gb_snprintf(buffer, 32, "Parser Worker #%ll", i);
|
||||||
//gb_thread_set_name(t, buffer);
|
//gb_thread_set_name(t, buffer);
|
||||||
gb_thread_start(t, parse_worker_file_proc, &worker_threads_data[i]);
|
gb_thread_start(t, parse_worker_file_proc, &worker_threads_data[i]);
|
||||||
}
|
}
|
||||||
@@ -4844,32 +4836,14 @@ ParseFileError parse_packages(Parser *p, String init_filename) {
|
|||||||
} else {
|
} else {
|
||||||
//NOTE(thebirk): If we cant lock a thread it must be working
|
//NOTE(thebirk): If we cant lock a thread it must be working
|
||||||
num_alive += 1;
|
num_alive += 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
while (num_alive > 0) {
|
|
||||||
isize prev_files_to_process = p->files_to_process.count;
|
|
||||||
gb_semaphore_wait(&p->worker_finished_semaphore);
|
|
||||||
num_alive -= 1;
|
|
||||||
|
|
||||||
if ((prev_files_to_process < p->files_to_process.count)) {
|
|
||||||
if (num_alive > 0) {
|
|
||||||
//NOTE(thebirk): Recreate semaphore to avoid overflowing the counter. Only needs to happen when there are more threads alive
|
|
||||||
//gb_semaphore_destroy(&p->worker_finished_semaphore);
|
|
||||||
//gb_semaphore_init(&p->worker_finished_semaphore);
|
|
||||||
}
|
|
||||||
printf("Early out!\n");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
if ((num_alive == 0) && (curr_import_index >= p->files_to_process.count)) {
|
if ((num_alive == 0) && (curr_import_index >= p->files_to_process.count)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gb_yield();
|
||||||
}
|
}
|
||||||
|
|
||||||
//NOTE(thebirk): Signal all workers to exit
|
//NOTE(thebirk): Signal all workers to exit
|
||||||
|
|||||||
Reference in New Issue
Block a user