From fc5ec64ba3bb0e337127443a85e2a3f23abba34b Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Mon, 13 Mar 2017 10:14:35 +1100 Subject: [PATCH] util/disk_cache: add helpers for creating/destroying disk cache put jobs V2: Make a copy of the data so we don't have to worry about it being freed before we are done compressing/writing. Reviewed-by: Grazvydas Ignotas --- src/util/disk_cache.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 19b593b76d4..ae2861d656e 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -78,6 +78,20 @@ struct disk_cache { uint64_t max_size; }; +struct disk_cache_put_job { + struct util_queue_fence fence; + + struct disk_cache *cache; + + cache_key key; + + /* Copy of cache data to be compressed and written. */ + void *data; + + /* Size of data to be compressed and written. */ + size_t size; +}; + /* Create a directory named 'path' if it does not already exist. * * Returns: 0 if path already exists as a directory or if created. @@ -735,6 +749,32 @@ deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest, return compressed_size; } +static struct disk_cache_put_job * +create_put_job(struct disk_cache *cache, const cache_key key, + const void *data, size_t size) +{ + struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *) + malloc(sizeof(struct disk_cache_put_job) + size); + + if (dc_job) { + dc_job->cache = cache; + memcpy(dc_job->key, key, sizeof(cache_key)); + dc_job->data = dc_job + 1; + memcpy(dc_job->data, data, size); + dc_job->size = size; + } + + return dc_job; +} + +static void +destroy_put_job(void *job, int thread_index) +{ + if (job) { + free(job); + } +} + struct cache_entry_file_data { uint32_t crc32; uint32_t uncompressed_size; -- 2.30.2