summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Björklund <anders.f.bjorklund@gmail.com>2019-05-30 20:55:18 +0200
committerJoel Rosdahl <joel@rosdahl.net>2019-05-30 20:55:17 +0200
commit6b1167ebd316013d2d10b0cd05afb7d6a95f7210 (patch)
treeb91995ba3f8a60b12fadb4eb0a082379e30bf40f
parent0b3276d5541e8a7f7eeccaa72820d0b5f312f8d0 (diff)
downloadccache-6b1167ebd316013d2d10b0cd05afb7d6a95f7210.tar.gz
refactor: Save tmp stderr until done storing (#428)
We might need it for the alternate codepaths If not using a standard file store, it might not be possible to move stderr instead of copy. For those cases, use the temporary file instead.
-rw-r--r--src/ccache.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/ccache.c b/src/ccache.c
index 4572b87f..16e88bf3 100644
--- a/src/ccache.c
+++ b/src/ccache.c
@@ -1331,9 +1331,9 @@ copy_file_from_cache(const char *source, const char *dest)
// Send cached stderr, if any, to stderr.
static void
-send_cached_stderr(void)
+send_cached_stderr(const char *path_stderr)
{
- int fd_stderr = open(cached_stderr, O_RDONLY | O_BINARY);
+ int fd_stderr = open(path_stderr, O_RDONLY | O_BINARY);
if (fd_stderr != -1) {
copy_fd(fd_stderr, 2);
close(fd_stderr);
@@ -1571,9 +1571,6 @@ to_cache(struct args *args, struct hash *depend_mode_hash)
// If recaching, we need to remove any previous .stderr.
x_unlink(cached_stderr);
}
- if (st.st_size == 0 || conf->depend_mode) {
- tmp_unlink(tmp_stderr);
- }
MTR_BEGIN("file", "file_put");
@@ -1621,9 +1618,18 @@ to_cache(struct args *args, struct hash *depend_mode_hash)
}
// Everything OK.
- send_cached_stderr();
+ if (st.st_size > 0) {
+ if (!conf->depend_mode) {
+ send_cached_stderr(cached_stderr);
+ } else {
+ send_cached_stderr(tmp_stderr);
+ }
+ }
update_manifest_file();
+ if (st.st_size == 0 || conf->depend_mode) {
+ tmp_unlink(tmp_stderr);
+ }
free(tmp_stderr);
free(tmp_stdout);
}
@@ -2353,7 +2359,7 @@ from_cache(enum fromcache_call_mode mode, bool put_object_in_manifest)
update_mtime(cached_dwo);
}
- send_cached_stderr();
+ send_cached_stderr(cached_stderr);
if (put_object_in_manifest) {
update_manifest_file();