diff options
| author | 2025-02-19 13:40:38 -0500 | |
|---|---|---|
| committer | 2025-02-19 13:40:38 -0500 | |
| commit | 2bee71a7e032c0972418e324bb1d7e6b02330b18 (patch) | |
| tree | fa5819e9d9efe75cbc6f50d462dd0eb6bd19b6a2 /src/portal | |
| parent | b36f022defd8d4ec5a8c29578bb583bea05dfbb6 (diff) | |
| download | camu-2bee71a7e032c0972418e324bb1d7e6b02330b18.tar.gz camu-2bee71a7e032c0972418e324bb1d7e6b02330b18.tar.bz2 camu-2bee71a7e032c0972418e324bb1d7e6b02330b18.zip | |
Server resource unload, many tweaks and fixes
- Initial liana client preferences.
- Hook up libplacebo dx11 backend.
- Make usage of FFmpeg hardware decoding api make some sense.
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/portal')
| -rw-r--r-- | src/portal/src/search.c | 30 |
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; } |