summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c17
1 files changed, 14 insertions, 3 deletions
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);