aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-07-25 22:12:24 +0200
committerdec05eba <dec05eba@protonmail.com>2020-07-25 22:12:24 +0200
commit1dfbe97b0a639c91d7727acc443ee2a9c2057920 (patch)
treebf322304531cf56f919c79471b04cdcca0b4e04f
parent53d74e58f46ec54b8d9b147876275532d02d97ed (diff)
Fix thread pool task count not increasing, incorrect ParserFileScopeReference
-rw-r--r--include/std/thread_pool.h2
-rw-r--r--src/parser.c3
-rw-r--r--src/std/buffer.c3
-rw-r--r--src/std/thread_pool.c10
4 files changed, 10 insertions, 8 deletions
diff --git a/include/std/thread_pool.h b/include/std/thread_pool.h
index f8acf83..ef73bad 100644
--- a/include/std/thread_pool.h
+++ b/include/std/thread_pool.h
@@ -33,7 +33,7 @@ typedef struct {
amal_mutex task_select_mutex;
Buffer queued_tasks;
bool dead;
- int num_finished_queued_tasks;
+ int num_taken_tasks;
} amal_thread_pool;
typedef struct {
diff --git a/src/parser.c b/src/parser.c
index d0b3c0a..e622b5f 100644
--- a/src/parser.c
+++ b/src/parser.c
@@ -1084,7 +1084,8 @@ void parser_queue_file(Parser *self, BufferView path, ParserFileScopeReference *
BufferView import_path_canonical = create_buffer_view(file_scope->canonical_path.data, file_scope->canonical_path.size);
if(hash_map_get(&self->imports_by_name, import_path_canonical, &parser_file_scope_index)) {
- *parser_file_scope = buffer_get(&self->imports, parser_file_scope_index, sizeof(ParserFileScopeReference*));
+ ParserFileScopeReference **file_sc = buffer_get(&self->imports, parser_file_scope_index, sizeof(ParserFileScopeReference*));
+ am_memcpy(*parser_file_scope, file_sc, sizeof(ParserFileScopeReference*));
return;
}
diff --git a/src/std/buffer.c b/src/std/buffer.c
index 4ec9c29..fbfb9da 100644
--- a/src/std/buffer.c
+++ b/src/std/buffer.c
@@ -70,8 +70,7 @@ int buffer_expand(Buffer *self, usize size) {
}
void* buffer_get(Buffer *self, usize index, usize type_size) {
- usize real_index;
- real_index = index * type_size;
+ usize real_index = index * type_size;
assert(real_index < self->size);
return &self->data[real_index];
}
diff --git a/src/std/thread_pool.c b/src/std/thread_pool.c
index 8f6e180..1e2addf 100644
--- a/src/std/thread_pool.c
+++ b/src/std/thread_pool.c
@@ -7,8 +7,10 @@
static CHECK_RESULT int thread_pool_take_task(amal_thread_pool *self, amal_thread_pool_task **result) {
*result = NULL;
cleanup_if_error(amal_mutex_lock(&self->task_select_mutex, "thread_pool_take_task"));
- if(self->num_finished_queued_tasks < (int)buffer_get_size(&self->queued_tasks, amal_thread_pool_task) && !self->dead)
- *result = buffer_get(&self->queued_tasks, self->num_finished_queued_tasks, sizeof(amal_thread_pool_task));
+ if((self->num_taken_tasks < (int)buffer_get_size(&self->queued_tasks, amal_thread_pool_task)) && !self->dead) {
+ *result = buffer_get(&self->queued_tasks, self->num_taken_tasks, sizeof(amal_thread_pool_task));
+ self->num_taken_tasks++;
+ }
cleanup:
amal_mutex_tryunlock(&self->task_select_mutex);
return 0;
@@ -80,7 +82,7 @@ int thread_pool_init(amal_thread_pool *self, int num_threads) {
}
self->dead = bool_false;
- self->num_finished_queued_tasks = 0;
+ self->num_taken_tasks = 0;
self->threads = NULL;
ignore_result_int(buffer_init(&self->queued_tasks, NULL));
@@ -174,7 +176,7 @@ bool thread_pool_join_all_tasks(amal_thread_pool *self) {
died = self->dead;
self->dead = bool_false;
buffer_clear(&self->queued_tasks);
- self->num_finished_queued_tasks = 0;
+ self->num_taken_tasks = 0;
return !died;
}