diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c index 7dd68e96..727e853b 100644 --- a/src/libostree/ostree-repo-commit.c +++ b/src/libostree/ostree-repo-commit.c @@ -1933,7 +1933,7 @@ rename_pending_loose_objects (OstreeRepo *self, return TRUE; } -/* Try to lock a transaction stage directory created by +/* Try to lock and delete a transaction stage directory created by * ostree_repo_prepare_transaction(). */ static gboolean diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 5fd92bb9..82dd286a 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -5980,7 +5980,9 @@ _ostree_repo_try_lock_tmpdir (int tmpdir_dfd, if (!glnx_make_lock_file (tmpdir_dfd, lock_name, LOCK_EX | LOCK_NB, file_lock_out, &local_error)) { - if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK)) + /* we need to handle EACCES too in the case of POSIX locks; see F_SETLK in fcntl(2) */ + if (g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_WOULD_BLOCK) + || g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED)) { did_lock = FALSE; }