summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
authorAargh Rai <aargh.rai+git@gmail.com>2026-08-15 13:55:35 +0530
committerAargh Rai <aargh.rai+git@gmail.com>2026-08-15 13:55:35 +0530
commit378cc549ab442c845ac9d62cc8cef6977073fe4d (patch)
tree83b4575d7ad80cdd4f694f596f5655e164e0478f /src/engine
parent7d36403836511ab0745791ce98498cf5112633c1 (diff)
md files
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/thread.c12
-rw-r--r--src/engine/threads.c16
2 files changed, 24 insertions, 4 deletions
diff --git a/src/engine/thread.c b/src/engine/thread.c
index 017e9b6..25e583e 100644
--- a/src/engine/thread.c
+++ b/src/engine/thread.c
@@ -1,8 +1,8 @@
#include "engine/threads.h"
#include <stdio.h>
-void *engine_thread(void *_args) {
- struct thread_args *args = (struct thread_args*)_args;
+void *child_thread(void *_args) {
+ struct child_thread_args *args = (struct child_thread_args*)_args;
args->stop = 0;
int depth = 0;
@@ -32,3 +32,11 @@ void *engine_thread(void *_args) {
args->stop = 2;
}
+// DTS requires a root thread which is initialize the search tree, and the
+// others who use that search tree. it's as if root_thread is the owner of the
+// tree
+void *root_thread(void *_args) {
+ struct root_thread_args *args = (struct root_thread_args*)_args;
+ args->stop = 0;
+}
+
diff --git a/src/engine/threads.c b/src/engine/threads.c
index 5afe155..541efb1 100644
--- a/src/engine/threads.c
+++ b/src/engine/threads.c
@@ -48,7 +48,7 @@ void threads_go(struct threads *handler) {
pthread_create(
handler->threads + i,
NULL,
- engine_thread,
+ i == 0 ? root_thread : child_thread,
handler->args + i
);
}
@@ -78,10 +78,22 @@ void threads_cleanup(struct threads *handler) {
}
void __threads_args_init(
- struct thread_args* args,
+ thread_args_t* _args,
struct threads *handler,
int i
) {
+ if (i > 0) {
+ struct child_thread_args *args = _args;
+ atomic_init(&args->stop, 0);
+ atomic_init(&args->finished, 0);
+ args->id = i;
+ args->position = handler->position;
+ args->go_args = handler->go_args;
+ args->message = handler->engine_messages->data[i];
+ return;
+ }
+
+ struct root_thread_args *args = _args;
atomic_init(&args->stop, 0);
atomic_init(&args->finished, 0);
args->id = i;