summaryrefslogtreecommitdiff
path: root/src/portal
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-11-30 14:32:51 -0500
committerAndrew Opalach <andrew@akon.city> 2025-11-30 14:32:51 -0500
commitc8412bbedae0fce38db96833732e8ce904721e4c (patch)
tree4611046186c714513d042966ce97825df0fecf9e /src/portal
parent0d6d13425015d78606232874498327cabcb0e4e2 (diff)
downloadcamu-c8412bbedae0fce38db96833732e8ce904721e4c.tar.gz
camu-c8412bbedae0fce38db96833732e8ce904721e4c.tar.bz2
camu-c8412bbedae0fce38db96833732e8ce904721e4c.zip
Build cleanup and fixes from sink testing
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/portal')
-rw-r--r--src/portal/src/search.c21
1 files changed, 18 insertions, 3 deletions
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);