summaryrefslogtreecommitdiff
path: root/src/portal
diff options
context:
space:
mode:
Diffstat (limited to 'src/portal')
-rw-r--r--src/portal/src/search.c30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/portal/src/search.c b/src/portal/src/search.c
index 2584878..ab14d0e 100644
--- a/src/portal/src/search.c
+++ b/src/portal/src/search.c
@@ -61,8 +61,10 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata)
{
nn_thread_setcanceltype(NNWT_THREAD_CANCEL_ASYNCHRONOUS);
struct camu_portal_bridge *bridge = (struct camu_portal_bridge *)userdata;
+
bool have_python = false;
nn_mutex_lock(&bridge->mutex);
+
for (;;) {
nn_cond_wait(&bridge->cond, &bridge->mutex);
if (bridge->quit) break;
@@ -83,19 +85,19 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata)
result.userdata = cmd->userdata;
switch (cmd->op) {
case CAMU_CLIENT_CREATE_SEARCH: {
- s32 id = portal_bridge_search(&cmd->module, &cmd->query);
- if (id >= 0) {
+ result.id = portal_bridge_search(&cmd->module, &cmd->query);
+ if (result.id >= 0) {
struct camu_search *search = al_alloc_object(struct camu_search);
- search->id = id;
- result.id = search->id;
+ search->id = result.id;
al_str_clone(&search->module, &cmd->module);
al_str_clone(&search->query, &cmd->query);
search->page = 0;
al_array_init(search->pages);
search->bridge = bridge;
al_array_push(bridge->searches, search);
- al_log_info("portal", "New search %x (%.*s).", id, al_str_fmt(&cmd->query));
+ al_log_info("portal", "New search %x (%.*s).", result.id, al_str_fmt(&cmd->query));
} else {
+ al_log_info("portal", "Failed to create search (%.*s).", al_str_fmt(&cmd->query));
}
al_str_free(&cmd->module);
al_str_free(&cmd->query);
@@ -123,6 +125,9 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata)
camu_post_cache_push(bridge->cache, post, false);
}
}
+ } else {
+ al_log_info("portal", "Requested search doesn't exist (id: %d).", search->id);
+ result.id = -1;
}
break;
}
@@ -132,8 +137,23 @@ static nn_thread_result NNWT_THREADCALL queue_thread(void *userdata)
bridge->queue.count = 0;
nn_signal_send(&bridge->results_signal);
}
+
+ // Return error for all remaining requests.
+ struct camu_portal_cmd *cmd;
+ al_array_foreach_ptr(bridge->queue, i, cmd) {
+ struct camu_portal_result result = { 0 };
+ result.op = cmd->op;
+ result.callback = cmd->callback;
+ result.userdata = cmd->userdata;
+ result.id = -1;
+ camu_queue_push(bridge->results, result);
+ }
+ bridge->queue.count = 0;
+ nn_signal_send(&bridge->results_signal);
+
nn_mutex_unlock(&bridge->mutex);
if (have_python) camu_python_close();
+
return 0;
}