about summary refs log tree commit
path: root/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'cache.c')
-rw-r--r--cache.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/cache.c b/cache.c
index 57c8918..b169d20 100644
--- a/cache.c
+++ b/cache.c
@@ -215,19 +215,25 @@ static int fill_slot(struct cache_slot *slot)
                 return errno;
 
         /* Redirect stdout to lockfile */
-        if (dup2(slot->lock_fd, STDOUT_FILENO) == -1)
+        if (dup2(slot->lock_fd, STDOUT_FILENO) == -1) {
+                close(tmp);
                 return errno;
+        }
 
         /* Generate cache content */
         slot->fn();
 
         /* update stat info */
-        if (fstat(slot->lock_fd, &slot->cache_st))
+        if (fstat(slot->lock_fd, &slot->cache_st)) {
+                close(tmp);
                 return errno;
+        }
 
         /* Restore stdout */
-        if (dup2(tmp, STDOUT_FILENO) == -1)
+        if (dup2(tmp, STDOUT_FILENO) == -1) {
+                close(tmp);
                 return errno;
+        }
 
         /* Close the temporary filedescriptor */
         if (close(tmp))