]> git.ipfire.org Git - thirdparty/git.git/blobdiff - lockfile.c
Merge branch 'jt/t5500-unflake'
[thirdparty/git.git] / lockfile.c
index 8e8ab4f29f3eaf05f056211042b5fd2f01727363..cc9a4b84283be34cdcd72770d77e2ef1adb998a6 100644 (file)
@@ -70,7 +70,8 @@ static void resolve_symlink(struct strbuf *path)
 }
 
 /* Make sure errno contains a meaningful value on error */
-static int lock_file(struct lock_file *lk, const char *path, int flags)
+static int lock_file(struct lock_file *lk, const char *path, int flags,
+                    int mode)
 {
        struct strbuf filename = STRBUF_INIT;
 
@@ -79,7 +80,7 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
                resolve_symlink(&filename);
 
        strbuf_addstr(&filename, LOCK_SUFFIX);
-       lk->tempfile = create_tempfile(filename.buf);
+       lk->tempfile = create_tempfile_mode(filename.buf, mode);
        strbuf_release(&filename);
        return lk->tempfile ? lk->tempfile->fd : -1;
 }
@@ -99,7 +100,7 @@ static int lock_file(struct lock_file *lk, const char *path, int flags)
  * exactly once. If timeout_ms is -1, try indefinitely.
  */
 static int lock_file_timeout(struct lock_file *lk, const char *path,
-                            int flags, long timeout_ms)
+                            int flags, long timeout_ms, int mode)
 {
        int n = 1;
        int multiplier = 1;
@@ -107,7 +108,7 @@ static int lock_file_timeout(struct lock_file *lk, const char *path,
        static int random_initialized = 0;
 
        if (timeout_ms == 0)
-               return lock_file(lk, path, flags);
+               return lock_file(lk, path, flags, mode);
 
        if (!random_initialized) {
                srand((unsigned int)getpid());
@@ -121,7 +122,7 @@ static int lock_file_timeout(struct lock_file *lk, const char *path,
                long backoff_ms, wait_ms;
                int fd;
 
-               fd = lock_file(lk, path, flags);
+               fd = lock_file(lk, path, flags, mode);
 
                if (fd >= 0)
                        return fd; /* success */
@@ -169,10 +170,11 @@ NORETURN void unable_to_lock_die(const char *path, int err)
 }
 
 /* This should return a meaningful errno on failure */
-int hold_lock_file_for_update_timeout(struct lock_file *lk, const char *path,
-                                     int flags, long timeout_ms)
+int hold_lock_file_for_update_timeout_mode(struct lock_file *lk,
+                                          const char *path, int flags,
+                                          long timeout_ms, int mode)
 {
-       int fd = lock_file_timeout(lk, path, flags, timeout_ms);
+       int fd = lock_file_timeout(lk, path, flags, timeout_ms, mode);
        if (fd < 0) {
                if (flags & LOCK_DIE_ON_ERROR)
                        unable_to_lock_die(path, errno);