diff options
Diffstat (limited to 'src/main.c')
| -rw-r--r-- | src/main.c | 17 |
1 files changed, 14 insertions, 3 deletions
@@ -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); |
