diff options
author | Timothy Arceri <[email protected]> | 2017-03-13 10:14:35 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-03-15 11:15:11 +1100 |
commit | fc5ec64ba3bb0e337127443a85e2a3f23abba34b (patch) | |
tree | 679c9ab49fd31f4f445e88e7b52bea0472730fd0 | |
parent | e2c4435b078a1471b044219552873a54b1817bac (diff) |
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 <[email protected]>
-rw-r--r-- | src/util/disk_cache.c | 40 |
1 files changed, 40 insertions, 0 deletions
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; |