summaryrefslogtreecommitdiff
path: root/src/cache
diff options
context:
space:
mode:
Diffstat (limited to 'src/cache')
-rw-r--r--src/cache/backings/file_common.c3
-rw-r--r--src/cache/backings/file_mapped.c1
-rw-r--r--src/cache/handlers/http.c7
3 files changed, 6 insertions, 5 deletions
diff --git a/src/cache/backings/file_common.c b/src/cache/backings/file_common.c
index c0b54c0..232580a 100644
--- a/src/cache/backings/file_common.c
+++ b/src/cache/backings/file_common.c
@@ -9,7 +9,8 @@ static off_t file_backing_get_size_estimate(struct cch_backing *backing)
static bool file_open_internal(struct cch_backing_file *file, str *path, size_t size)
{
- if (!aki_file_open(&file->file, path, size != 0)) return false;
+ s32 flags = size != 0 ? AKI_FILE_CREATE : 0;
+ if (!aki_file_open(&file->file, path, flags)) return false;
file->filesize = aki_file_get_filesize(&file->file);
if (!size) {
file->size = file->filesize;
diff --git a/src/cache/backings/file_mapped.c b/src/cache/backings/file_mapped.c
index 1b06ad2..4277c21 100644
--- a/src/cache/backings/file_mapped.c
+++ b/src/cache/backings/file_mapped.c
@@ -43,6 +43,7 @@ static void file_backing_resize(struct cch_backing *backing, size_t size)
aki_mutex_lock(&file->mutex);
file->size = size;
if ((off_t)size > file->filesize) {
+ // TODO: Unmap, truncate, map?
file->u.map = aki_file_mremap(&file->file, size, file->u.map);
aki_file_truncate(&file->file, size);
file->filesize = size;
diff --git a/src/cache/handlers/http.c b/src/cache/handlers/http.c
index 1daf231..dd3c8ac 100644
--- a/src/cache/handlers/http.c
+++ b/src/cache/handlers/http.c
@@ -80,12 +80,11 @@ static size_t http_callback(void *userdata, u8 op, u8 *buf, s64 int0)
static void signal_callback(void *userdata)
{
struct cch_handler_http *http = (struct cch_handler_http *)userdata;
+ u32 size;
+ s32 index;
do {
- u32 size;
- camu_queue_size(http->queue, size);
+ camu_queue_try_pop(http->queue, size, index);
if (size == 0) break;
- s32 index;
- camu_queue_pop(http->queue, index);
if (index == -1) {
aki_event_loop_break(&http->loop);
break;