diff options
author | Anders Björklund <anders.f.bjorklund@gmail.com> | 2019-05-30 20:55:18 +0200 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2019-05-30 20:55:17 +0200 |
commit | 6b1167ebd316013d2d10b0cd05afb7d6a95f7210 (patch) | |
tree | b91995ba3f8a60b12fadb4eb0a082379e30bf40f | |
parent | 0b3276d5541e8a7f7eeccaa72820d0b5f312f8d0 (diff) | |
download | ccache-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.c | 20 |
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(); |