summaryrefslogtreecommitdiff
path: root/src/cache/handlers
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2025-01-27 21:56:39 -0500
committerAndrew Opalach <andrew@akon.city> 2025-01-27 21:56:39 -0500
commit457a3cc1a04e45e31370d9083186436b0d12ab1d (patch)
tree7ffb9d676edd4a1b88e8f1020dd905efcfe6b83a /src/cache/handlers
parentf760ecedb619a55ec8ee989639ac385f27e82d98 (diff)
downloadcamu-457a3cc1a04e45e31370d9083186436b0d12ab1d.tar.gz
camu-457a3cc1a04e45e31370d9083186436b0d12ab1d.tar.bz2
camu-457a3cc1a04e45e31370d9083186436b0d12ab1d.zip
Refactor threaded waits
- Move seek to handler thread. - Cleanup and comment some stuff. Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/cache/handlers')
-rw-r--r--src/cache/handlers/cdio.c12
-rw-r--r--src/cache/handlers/cdio.h2
-rw-r--r--src/cache/handlers/http.c14
-rw-r--r--src/cache/handlers/http.h4
4 files changed, 18 insertions, 14 deletions
diff --git a/src/cache/handlers/cdio.c b/src/cache/handlers/cdio.c
index ac90c03..1b4c44b 100644
--- a/src/cache/handlers/cdio.c
+++ b/src/cache/handlers/cdio.c
@@ -68,7 +68,7 @@ static nn_thread_result NNWT_THREADCALL cd_read_thread(void *userdata)
cch_backing_fill_range(cdio->backing, pointer, BYTES_PER_STEP);
cdio->sector += ret;
cdio->backing->unlock(cdio->backing);
- cch_threaded_waits_evaluate(&cdio->handler, cdio->backing);
+ cch_threaded_waits_evaluate(&cdio->waits, cdio->backing);
if (ret < SECTORS_PER_STEP || cdio->sector > cdio->end) {
al_log_debug("cdio", "Normal CD EOF.");
break;
@@ -78,7 +78,7 @@ static nn_thread_result NNWT_THREADCALL cd_read_thread(void *userdata)
if (cdio->sector <= cdio->end) {
al_log_warn("cdio", "Disc read cut short (sectors: %zd, end: %zd).", cdio->sector, cdio->end);
// We didn't read the full disc, disable waiters.
- cch_threaded_waits_disable_all(&cdio->handler);
+ cch_threaded_waits_disable_all(&cdio->waits);
}
return 0;
@@ -101,13 +101,13 @@ static void handler_cdio_maybe_spawn_worker(struct cch_handler *handler, size_t
static bool handler_cdio_wait_for_range(struct cch_handler *handler, struct cch_handler_wait *wait)
{
struct cch_handler_cdio *cdio = (struct cch_handler_cdio *)handler;
- return cch_threaded_wait_for_range(&cdio->handler, cdio->backing, wait);
+ return cch_threaded_wait_for_range(&cdio->waits, cdio->handler.entry, cdio->backing, wait);
}
static void handler_cdio_free(struct cch_handler **handler)
{
struct cch_handler_cdio *cdio = (struct cch_handler_cdio *)*handler;
- cch_threaded_waits_disable_all(&cdio->handler);
+ cch_threaded_waits_disable_all(&cdio->waits);
if (al_atomic_load(s32)(&cdio->running, AL_ATOMIC_RELAXED)) {
al_atomic_store(s32)(&cdio->running, 0, AL_ATOMIC_RELAXED);
nn_thread_join(&cdio->thread);
@@ -116,7 +116,7 @@ static void handler_cdio_free(struct cch_handler **handler)
cdio_log_messages(cdio);
cdio_cddap_close(cdio->drive);
}
- cch_threaded_waits_close(&cdio->handler);
+ cch_threaded_waits_close(&cdio->waits);
al_str_free(&cdio->handler.liana);
al_free(cdio);
*handler = NULL;
@@ -208,6 +208,6 @@ struct cch_entry *cch_handler_cdio_create(void)
nn_buffer_init(&cdio->buffer);
nn_buffer_ensure_space(&cdio->buffer, BYTES_PER_STEP);
nn_buffer_set_size(&cdio->buffer, BYTES_PER_STEP);
- cch_threaded_waits_init(&cdio->handler);
+ cch_threaded_waits_init(&cdio->waits);
return entry;
}
diff --git a/src/cache/handlers/cdio.h b/src/cache/handlers/cdio.h
index 3a3966a..650d2e5 100644
--- a/src/cache/handlers/cdio.h
+++ b/src/cache/handlers/cdio.h
@@ -5,6 +5,7 @@
#include "../handler.h"
#include "../entry.h"
+#include "../threaded_waits.h"
struct cch_handler_cdio {
struct cch_handler handler;
@@ -16,6 +17,7 @@ struct cch_handler_cdio {
struct nn_buffer buffer;
atomic(s32) running;
struct nn_thread thread;
+ struct cch_handler_waits waits;
};
struct cch_entry *cch_handler_cdio_create(void);
diff --git a/src/cache/handlers/http.c b/src/cache/handlers/http.c
index b34e4ba..1856014 100644
--- a/src/cache/handlers/http.c
+++ b/src/cache/handlers/http.c
@@ -30,7 +30,7 @@ static void http_callback(void *userdata, u8 op, u8 *buf, void *opaque)
http->backing->write(http->backing, buf, http->pointer, &n);
http->pointer += n;
*(size_t *)opaque = n;
- cch_threaded_waits_evaluate(&http->handler, http->backing);
+ cch_threaded_waits_evaluate(&http->waits, http->backing);
break;
}
case NNWT_HTTP_RESPONSE_CODE: {
@@ -42,7 +42,7 @@ static void http_callback(void *userdata, u8 op, u8 *buf, void *opaque)
curl_off_t length = *(curl_off_t *)opaque;
al_log_debug("cache_handler_http", "Content-Length: %"CURL_FORMAT_CURL_OFF_T".", length);
cch_entry_set_size(http->handler.entry, length);
- cch_threaded_waits_signal_any(&http->handler);
+ cch_threaded_waits_signal_any(&http->waits);
break;
}
case NNWT_HTTP_REDIRECT: {
@@ -54,7 +54,7 @@ static void http_callback(void *userdata, u8 op, u8 *buf, void *opaque)
al_log_debug("cache_handler_http", "Transfer finished.");
break;
case NNWT_HTTP_ERROR:
- cch_threaded_waits_disable_all(&http->handler);
+ cch_threaded_waits_disable_all(&http->waits);
break;
default:
break;
@@ -77,18 +77,18 @@ static void handler_http_maybe_spawn_worker(struct cch_handler *handler, size_t
static bool handler_http_wait_for_range(struct cch_handler *handler, struct cch_handler_wait *wait)
{
struct cch_handler_http *http = (struct cch_handler_http *)handler;
- return cch_threaded_wait_for_range(&http->handler, http->backing, wait);
+ return cch_threaded_wait_for_range(&http->waits, http->handler.entry, http->backing, wait);
}
static void handler_http_free(struct cch_handler **handler)
{
struct cch_handler_http *http = (struct cch_handler_http *)*handler;
- cch_threaded_waits_disable_all(&http->handler);
+ cch_threaded_waits_disable_all(&http->waits);
struct nn_http *request;
al_array_foreach_ptr(http->requests, i, request) {
nn_http_close(request);
}
- cch_threaded_waits_close(&http->handler);
+ cch_threaded_waits_close(&http->waits);
al_array_free(http->requests);
al_str_free(&http->url);
al_str_free(&http->handler.liana);
@@ -119,6 +119,6 @@ struct cch_entry *cch_handler_http_create(str *url, struct nn_event_loop *loop)
al_str_clone(&http->url, url);
http->pointer = 0;
al_array_init(http->requests);
- cch_threaded_waits_init(&http->handler);
+ cch_threaded_waits_init(&http->waits);
return entry;
}
diff --git a/src/cache/handlers/http.h b/src/cache/handlers/http.h
index ef47173..2b87db9 100644
--- a/src/cache/handlers/http.h
+++ b/src/cache/handlers/http.h
@@ -6,14 +6,16 @@
#include "../handler.h"
#include "../entry.h"
+#include "../threaded_waits.h"
struct cch_handler_http {
struct cch_handler handler;
struct cch_backing *backing;
+ struct nn_event_loop *loop;
str url;
off_t pointer;
array(struct nn_http) requests;
- struct nn_event_loop *loop;
+ struct cch_handler_waits waits;
};
struct cch_entry *cch_handler_http_create(str *url, struct nn_event_loop *loop);