summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Walters <walters@verbum.org>2018-06-18 14:47:49 +0000
committerAtomic Bot <atomic-devel@projectatomic.io>2018-06-19 18:29:31 +0000
commit5e9d3828114d18340a93a30458cf8ac716f6f21e (patch)
tree4f6c35ee88ba59d4ee834b31b6aca436eb42235e
parentacab2c1ac6a6a30f0298feb2cbfcb3dc5e515d8a (diff)
downloadostree-5e9d3828114d18340a93a30458cf8ac716f6f21e.tar.gz
lib/repo: Do free space math under lock in error path
We were referencing the txn bits outside of the lock in the error path. Generally shouldn't matter, but e.g. Rust wouldn't let us do this, and race detector tooling will warn about it. Closes: #1632 Approved by: jlebon
-rw-r--r--src/libostree/ostree-repo-commit.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c
index 0642828c..37be748b 100644
--- a/src/libostree/ostree-repo-commit.c
+++ b/src/libostree/ostree-repo-commit.c
@@ -896,8 +896,9 @@ write_content_object (OstreeRepo *self,
const fsblkcnt_t object_blocks = (size / self->txn.blocksize) + 1;
if (object_blocks > self->txn.max_blocks)
{
+ guint64 bytes_required = (guint64)object_blocks * self->txn.blocksize;
g_mutex_unlock (&self->txn_lock);
- g_autofree char *formatted_required = g_format_size ((guint64)object_blocks * self->txn.blocksize);
+ g_autofree char *formatted_required = g_format_size (bytes_required);
if (self->min_free_space_percent > 0)
return glnx_throw (error, "min-free-space-percent '%u%%' would be exceeded, %s more required",
self->min_free_space_percent, formatted_required);
@@ -1609,8 +1610,9 @@ ostree_repo_prepare_transaction (OstreeRepo *self,
self->txn.max_blocks = bfree - reserved_blocks;
else
{
+ guint64 bytes_required = bfree * self->txn.blocksize;
g_mutex_unlock (&self->txn_lock);
- g_autofree char *formatted_free = g_format_size (bfree * self->txn.blocksize);
+ g_autofree char *formatted_free = g_format_size (bytes_required);
if (self->min_free_space_percent > 0)
return glnx_throw (error, "min-free-space-percent '%u%%' would be exceeded, %s available",
self->min_free_space_percent, formatted_free);