summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca BRUNO <luca.bruno@coreos.com>2021-08-25 12:30:21 +0000
committerLuca BRUNO <luca.bruno@coreos.com>2021-08-25 16:17:52 +0000
commitc64b4bcebafd06a0cbfc4b8e67fb3e20e99488bb (patch)
tree6ce5664e12456085b8160fed5607f14d76ffcb8b
parent30909a28f2aff54b615837a184f53509cbccc381 (diff)
downloadostree-c64b4bcebafd06a0cbfc4b8e67fb3e20e99488bb.tar.gz
lib: improve transactions auto-cleanup logic
This fixes some aspects of OstreeRepoAutoTransaction and re-aligns it with the logic in flatpak. Specifically: * link to the underlying repo through refcounting * bridge internal errors to warning messages * verify the input pointer type This is a preparation step before exposing this logic as a public API.
-rw-r--r--src/libostree/ostree-repo-private.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h
index 0cd9d8bb..67f755bd 100644
--- a/src/libostree/ostree-repo-private.h
+++ b/src/libostree/ostree-repo-private.h
@@ -234,9 +234,17 @@ typedef OstreeRepo _OstreeRepoAutoTransaction;
static inline void
_ostree_repo_auto_transaction_cleanup (void *p)
{
+ if (p == NULL)
+ return;
+ g_return_if_fail (OSTREE_IS_REPO (p));
+
OstreeRepo *repo = p;
- if (repo)
- (void) ostree_repo_abort_transaction (repo, NULL, NULL);
+ g_autoptr(GError) error = NULL;
+
+ if (!ostree_repo_abort_transaction (repo, NULL, &error))
+ g_warning("Failed to auto-cleanup OSTree transaction: %s", error->message);
+
+ g_object_unref (repo);
}
static inline _OstreeRepoAutoTransaction *
@@ -246,7 +254,8 @@ _ostree_repo_auto_transaction_start (OstreeRepo *repo,
{
if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error))
return NULL;
- return (_OstreeRepoAutoTransaction *)repo;
+
+ return (_OstreeRepoAutoTransaction *) g_object_ref (repo);
}
G_DEFINE_AUTOPTR_CLEANUP_FUNC (_OstreeRepoAutoTransaction, _ostree_repo_auto_transaction_cleanup)