summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAargh Rai <aargh.rai+git@gmail.com>2026-07-24 09:32:54 +0530
committerAargh Rai <aargh.rai+git@gmail.com>2026-07-24 09:32:54 +0530
commit7d36403836511ab0745791ce98498cf5112633c1 (patch)
treebb1f998e3ce8fc99a8611dc64d578ca269c56b01 /src
parente6cead853d66b4ea9ea8d9c6dba33e5a1720a99d (diff)
fixed the quit commandHEADmaster
Diffstat (limited to 'src')
-rw-r--r--src/ipc/engine_message.c15
-rw-r--r--src/main.c17
-rw-r--r--src/uci.c5
3 files changed, 33 insertions, 4 deletions
diff --git a/src/ipc/engine_message.c b/src/ipc/engine_message.c
index 76814f4..c54a02e 100644
--- a/src/ipc/engine_message.c
+++ b/src/ipc/engine_message.c
@@ -16,6 +16,17 @@ void engine_message_handler_init(engine_message_handler_t *handle) {
handle->popped_count = 0;
}
+void engine_message_handler_deinit(engine_message_handler_t *handle) {
+ engine_message_t *next, *message = handle->oldest_valid;
+
+ int count = handle->count;
+ while (count-- > 0) {
+ next = message->next;
+ engine_message_deinit(message);
+ message = next;
+ }
+}
+
void engine_message_handler_acquire(engine_message_handler_t *handle) {
while (atomic_flag_test_and_set(&handler_busy));
}
@@ -111,6 +122,10 @@ bool engine_message_is_ready(engine_message_t *message) {
void engine_messages_deinit(engine_messages_t *messages) {
assert(messages != NULL);
+ for (int i = 0; i < 10; i++) {
+ engine_message_handler_deinit(messages->data[i]);
+ free(messages->data[i]);
+ }
free(messages->data);
}
diff --git a/src/main.c b/src/main.c
index 6dd5e13..5ece480 100644
--- a/src/main.c
+++ b/src/main.c
@@ -8,6 +8,7 @@
#include "ipc/state.h"
#include "ipc/threads.h"
#include "ipc/uci.h"
+#include "engine/ttable.h"
#include "engine/magic.h"
void *uci_thread_func(void* data) {
@@ -17,6 +18,7 @@ void *uci_thread_func(void* data) {
int main(int argc, char** argv) {
magic_init();
+ zobrist_init();
ipc_state_t ipc_state;
ipc_state_init(&ipc_state);
@@ -33,21 +35,29 @@ int main(int argc, char** argv) {
waiting_for_go:
engine_messages_refresh(&ipc_state.engine_messages);
skip_refresh:
- ipc_state_wait_for_event(&ipc_state, EVENT_ENGINE_GO);
+ bool is_stop, quit;
+ while (
+ !ipc_state_is_event(&ipc_state, EVENT_ENGINE_GO) &&
+ !(quit = ipc_state_is_event(&ipc_state, EVENT_QUIT))
+ );
+ if (quit) goto quit;
engine_threads.running_count = ipc_state.uci_state.threads;
ipc_state.engine_messages.count = ipc_state.uci_state.threads;
- threads_reserve(&engine_threads, ipc_state.uci_state.threads);
+ threads_reserve(&engine_threads, engine_threads.running_count);
threads_go(&engine_threads);
ipc_state_set_event(&ipc_state, EVENT_UCI_RUNNING);
- bool is_stop;
while (1) {
while (
!ipc_state_is_event(&ipc_state, EVENT_ENGINE_RUNNING) &&
+ !(quit = ipc_state_is_event(&ipc_state, EVENT_QUIT)) &&
!(is_stop = ipc_state_is_event(&ipc_state, EVENT_ENGINE_STOP))
);
+ if (quit) {
+ break;
+ }
if (is_stop) {
threads_cleanup(&engine_threads);
ipc_state_set_event(&ipc_state, EVENT_UCI_RUNNING);
@@ -57,6 +67,7 @@ skip_refresh:
ipc_state_set_event(&ipc_state, EVENT_UCI_RUNNING);
}
+quit:
ipc_state_deinit(&ipc_state);
pthread_cancel(uci_thread);
threads_deinit(&engine_threads);
diff --git a/src/uci.c b/src/uci.c
index cc16954..f842328 100644
--- a/src/uci.c
+++ b/src/uci.c
@@ -59,6 +59,7 @@ void handle_ipc(ipc_state_t *state) {
assert(signal < UCI_SIGNAL_COUNT);
if (signal == UCI_SIGNAL_NONE) return;
if (signal == UCI_SIGNAL_QUIT) {
+ ipc_state_set_event(state, EVENT_QUIT);
return;
}
if (signal == UCI_SIGNAL_GO) {
@@ -151,7 +152,9 @@ void handle_ipc(ipc_state_t *state) {
return;
}
if (signal == UCI_SIGNAL_STOP) {
- printf("uci stopping\n");
+ ipc_state_set_event(state, EVENT_ENGINE_STOP);
+ state->uci_state.signal = UCI_SIGNAL_NONE;
+ state->uci_state.current_state = UCI_STATE_IDLE;
return;
}
}