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.
This commit is contained in:
Luca BRUNO 2021-08-25 12:30:21 +00:00
parent 30909a28f2
commit c64b4bceba
No known key found for this signature in database
GPG Key ID: A9834A2252078E4E
1 changed files with 12 additions and 3 deletions

View File

@ -234,9 +234,17 @@ typedef OstreeRepo _OstreeRepoAutoTransaction;
static inline void static inline void
_ostree_repo_auto_transaction_cleanup (void *p) _ostree_repo_auto_transaction_cleanup (void *p)
{ {
if (p == NULL)
return;
g_return_if_fail (OSTREE_IS_REPO (p));
OstreeRepo *repo = p; OstreeRepo *repo = p;
if (repo) g_autoptr(GError) error = NULL;
(void) ostree_repo_abort_transaction (repo, NULL, 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 * static inline _OstreeRepoAutoTransaction *
@ -246,7 +254,8 @@ _ostree_repo_auto_transaction_start (OstreeRepo *repo,
{ {
if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error)) if (!ostree_repo_prepare_transaction (repo, NULL, cancellable, error))
return NULL; return NULL;
return (_OstreeRepoAutoTransaction *)repo;
return (_OstreeRepoAutoTransaction *) g_object_ref (repo);
} }
G_DEFINE_AUTOPTR_CLEANUP_FUNC (_OstreeRepoAutoTransaction, _ostree_repo_auto_transaction_cleanup) G_DEFINE_AUTOPTR_CLEANUP_FUNC (_OstreeRepoAutoTransaction, _ostree_repo_auto_transaction_cleanup)