util/disk_cache: check rename result

I haven't seen this causing problems in practice, but for correctness
we should also check if rename succeeded to avoid breaking accounting
and leaving a .tmp file behind.

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
This commit is contained in:
Grazvydas Ignotas
2017-03-18 22:58:55 +02:00
committed by Timothy Arceri
parent 67911fa4b8
commit 274aaa331c

View File

@@ -878,7 +878,11 @@ cache_put(void *job, int thread_index)
unlink(filename_tmp);
goto done;
}
rename(filename_tmp, filename);
ret = rename(filename_tmp, filename);
if (ret == -1) {
unlink(filename_tmp);
goto done;
}
file_size += cf_data_size;
p_atomic_add(dc_job->cache->size, file_size);
@@ -886,7 +890,7 @@ cache_put(void *job, int thread_index)
done:
if (fd_final != -1)
close(fd_final);
/* This close finally releases the flock, (now that the final dile
/* This close finally releases the flock, (now that the final file
* has been renamed into place and the size has been added).
*/
if (fd != -1)