From 162edf71ed672f92ae9c63ace6e75b0c94ab0357 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Fri, 17 Nov 2017 17:06:32 +0000 Subject: [PATCH] lib/repo: Don't delete new tmpdir if it can't be locked If a newly allocated tmpdir can't be locked, set initialized to FALSE so that glnx_tmpdir_cleanup doesn't delete it when new_tmpdir goes out of scope. Closes: #1346 Approved by: cgwalters --- src/libostree/ostree-repo.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 768c9ce7..6e342125 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -5004,7 +5004,16 @@ _ostree_repo_allocate_tmpdir (int tmpdir_dfd, error)) return FALSE; if (!did_lock) - continue; + { + /* We raced and someone else already locked the newly created + * directory. Free the resources here and then mark it as + * uninitialized so glnx_tmpdir_cleanup doesn't delete the directory + * when new_tmpdir goes out of scope. + */ + glnx_tmpdir_unset (&new_tmpdir); + new_tmpdir.initialized = FALSE; + continue; + } g_debug ("Using new tmpdir %s", new_tmpdir.path); ret_tmpdir = new_tmpdir; /* Transfer ownership */