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 <notasas@gmail.com>
This commit is contained in:
Timothy Arceri
2017-03-13 10:14:35 +11:00
parent e2c4435b07
commit fc5ec64ba3

View File

@@ -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;