From c8412bbedae0fce38db96833732e8ce904721e4c Mon Sep 17 00:00:00 2001 From: Andrew Opalach Date: Sun, 30 Nov 2025 14:32:51 -0500 Subject: Build cleanup and fixes from sink testing Signed-off-by: Andrew Opalach --- src/portal/src/search.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'src/portal') diff --git a/src/portal/src/search.c b/src/portal/src/search.c index a1b7310..3f012bf 100644 --- a/src/portal/src/search.c +++ b/src/portal/src/search.c @@ -75,6 +75,7 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata) // Defer python init. if (!(have_python = camu_python_init())) { log_error("Failed to initialize python."); + bridge->quit = 1; break; } } @@ -125,13 +126,15 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata) } } } else { - log_info("Requested search doesn't exist (id: %d).", search->id); result.id = -1; + log_info("Requested search doesn't exist (id: %d).", cmd->id); } break; } } + camu_queue_lock(bridge->results); camu_queue_push(bridge->results, result); + camu_queue_unlock(bridge->results); } bridge->queue.count = 0; nn_signal_send(&bridge->results_signal); @@ -145,7 +148,9 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata) result.callback = cmd->callback; result.userdata = cmd->userdata; result.id = -1; + camu_queue_lock(bridge->results); camu_queue_push(bridge->results, result); + camu_queue_unlock(bridge->results); } bridge->queue.count = 0; nn_signal_send(&bridge->results_signal); @@ -187,13 +192,18 @@ void camu_portal_init(struct camu_portal_bridge *bridge, struct camu_post_cache void camu_portal_create_search(struct camu_portal_bridge *bridge, str *module, str *query, void (*callback)(void *, void *, struct camu_portal_result *), void *userdata) { + nn_mutex_lock(&bridge->mutex); + if (bridge->quit) { + callback(bridge->userdata, userdata, NULL); + nn_mutex_unlock(&bridge->mutex); + return; + } struct camu_portal_cmd cmd = { 0 }; cmd.op = CAMU_CLIENT_CREATE_SEARCH; al_str_clone(&cmd.module, module); al_str_clone(&cmd.query, query); cmd.callback = callback; cmd.userdata = userdata; - nn_mutex_lock(&bridge->mutex); al_array_push(bridge->queue, cmd); if (nn_cond_is_waiting(&bridge->cond)) { nn_cond_signal(&bridge->cond); @@ -204,13 +214,18 @@ void camu_portal_create_search(struct camu_portal_bridge *bridge, str *module, s void camu_portal_get_page(struct camu_portal_bridge *bridge, s32 id, u32 num, void (*callback)(void *, void *, struct camu_portal_result *), void *userdata) { + nn_mutex_lock(&bridge->mutex); + if (bridge->quit) { + callback(bridge->userdata, userdata, NULL); + nn_mutex_unlock(&bridge->mutex); + return; + } struct camu_portal_cmd cmd = { 0 }; cmd.op = CAMU_CLIENT_GET_PAGE; cmd.id = id; cmd.num = num; cmd.callback = callback; cmd.userdata = userdata; - nn_mutex_lock(&bridge->mutex); al_array_push(bridge->queue, cmd); if (nn_cond_is_waiting(&bridge->cond)) { nn_cond_signal(&bridge->cond); -- cgit v1.2.3-101-g0448