repo: Correctly initialize refcount of temporary transaction
authorSimon McVittie <smcv@collabora.com>
Sat, 30 Apr 2022 11:53:42 +0000 (12:53 +0100)
committerSimon McVittie <smcv@collabora.com>
Sat, 30 Apr 2022 11:53:42 +0000 (12:53 +0100)
Previously, the reference count was left uninitialized as a result of
bypassing the constructor, and the intended abort-on-error usually
wouldn't have happened.

Fixes: 8a9737a "repo/private: move OstreeRepoAutoTransaction to a boxed type"
Resolves: https://github.com/ostreedev/ostree/issues/2592
Signed-off-by: Simon McVittie <smcv@collabora.com>
src/libostree/ostree-repo-commit.c

index d688e9b704e7f86d5964695bfa6b83070c24c127..0af8fee3bd4131c643324a7979d8c8ab6a1f3119 100644 (file)
@@ -1689,10 +1689,10 @@ ostree_repo_prepare_transaction (OstreeRepo     *self,
   g_debug ("Preparing transaction in repository %p", self);
 
   /* Set up to abort the transaction if we return early from this function.
-   * This needs to be manually built here due to a circular dependency. */
-  g_autoptr(OstreeRepoAutoTransaction) txn = g_malloc(sizeof(OstreeRepoAutoTransaction));
+   * We can't call _ostree_repo_auto_transaction_start() here, because that
+   * would be a circular dependency; use the lower-level version instead. */
+  g_autoptr(OstreeRepoAutoTransaction) txn = _ostree_repo_auto_transaction_new (self);
   g_assert (txn != NULL);
-  txn->repo = self;
 
   memset (&self->txn.stats, 0, sizeof (OstreeRepoTransactionStats));