diff options
author | Luca BRUNO <luca.bruno@coreos.com> | 2021-08-25 12:30:21 +0000 |
---|---|---|
committer | Luca BRUNO <luca.bruno@coreos.com> | 2021-08-25 16:17:52 +0000 |
commit | c64b4bcebafd06a0cbfc4b8e67fb3e20e99488bb (patch) | |
tree | 6ce5664e12456085b8160fed5607f14d76ffcb8b | |
parent | 30909a28f2aff54b615837a184f53509cbccc381 (diff) | |
download | ostree-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.h | 15 |
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) |