diff options
author | John Keeping | 2017-04-24 19:38:34 +0100 |
---|---|---|
committer | John Keeping | 2017-10-03 19:19:34 +0100 |
commit | 3b485cc5422f800d142c7023295e82c0a1c10b19 (patch) | |
tree | c5c46cdf02c2cff650cc15342c3a5ced861c912c | |
parent | Use https for submodule (diff) | |
download | cgit-3b485cc5422f800d142c7023295e82c0a1c10b19.tar.gz cgit-3b485cc5422f800d142c7023295e82c0a1c10b19.zip |
cache: flush stdio before restoring FDs
As described in commit 2efb59e (ui-patch: Flush stdout after outputting data, 2014-06-11), we need to ensure that stdout is flushed before restoring the file descriptor when writing to the cache. It turns out that it's not just ui-patch that is affected by this but also raw diff which writes to stdout internally. Let's avoid risking more places doing this by ensuring that stdout is flushed after writing in fill_slot(). Signed-off-by: John Keeping <john@keeping.me.uk>
-rw-r--r-- | cache.c | 6 | ||||
-rw-r--r-- | ui-patch.c | 2 |
2 files changed, 6 insertions, 2 deletions
diff --git a/cache.c b/cache.c index 6736a01..2ccdc4e 100644 --- a/cache.c +++ b/cache.c | |||
@@ -224,6 +224,12 @@ static int fill_slot(struct cache_slot *slot) | |||
224 | /* Generate cache content */ | 224 | /* Generate cache content */ |
225 | slot->fn(); | 225 | slot->fn(); |
226 | 226 | ||
227 | /* Make sure any buffered data is flushed to the file */ | ||
228 | if (fflush(stdout)) { | ||
229 | close(tmp); | ||
230 | return errno; | ||
231 | } | ||
232 | |||
227 | /* update stat info */ | 233 | /* update stat info */ |
228 | if (fstat(slot->lock_fd, &slot->cache_st)) { | 234 | if (fstat(slot->lock_fd, &slot->cache_st)) { |
229 | close(tmp); | 235 | close(tmp); |
diff --git a/ui-patch.c b/ui-patch.c index 69aa4a8..8007a11 100644 --- a/ui-patch.c +++ b/ui-patch.c | |||
@@ -92,6 +92,4 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, | |||
92 | log_tree_commit(&rev, commit); | 92 | log_tree_commit(&rev, commit); |
93 | printf("-- \ncgit %s\n\n", cgit_version); | 93 | printf("-- \ncgit %s\n\n", cgit_version); |
94 | } | 94 | } |
95 | |||
96 | fflush(stdout); | ||
97 | } | 95 | } |