From 4d992b29862e3047b001646f5b8f5cff46000066 Mon Sep 17 00:00:00 2001 From: kamiyadm Date: Fri, 9 Aug 2024 22:20:31 +0800 Subject: [PATCH] fix: SIGBRT when installing two apps ostree_repo_pull() will iterate the thread default main context, We new a new context before call ostree_repo_pull(). Log: --- libs/linglong/src/linglong/repo/ostree_repo.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/libs/linglong/src/linglong/repo/ostree_repo.cpp b/libs/linglong/src/linglong/repo/ostree_repo.cpp index 5a558eb98..582a52033 100644 --- a/libs/linglong/src/linglong/repo/ostree_repo.cpp +++ b/libs/linglong/src/linglong/repo/ostree_repo.cpp @@ -1261,6 +1261,9 @@ void OSTreeRepo::pull(service::InstallTask &taskContext, Q_ASSERT(progress != nullptr); g_autoptr(GError) gErr = nullptr; + + auto threadContext = g_main_context_new(); + g_main_context_push_thread_default(threadContext); auto status = ostree_repo_pull(this->ostreeRepo.get(), this->cfg.defaultRepo.c_str(), refs, @@ -1269,6 +1272,7 @@ void OSTreeRepo::pull(service::InstallTask &taskContext, cancellable, &gErr); ostree_async_progress_finish(progress); + g_main_context_unref(threadContext); if (status == FALSE) { // fallback to old ref qWarning() << gErr->message; @@ -1278,6 +1282,9 @@ void OSTreeRepo::pull(service::InstallTask &taskContext, char *oldRefs[] = { (char *)refString.data(), nullptr }; g_clear_error(&gErr); + + auto threadContext = g_main_context_new(); + g_main_context_push_thread_default(threadContext); status = ostree_repo_pull(this->ostreeRepo.get(), this->cfg.defaultRepo.c_str(), oldRefs, @@ -1285,6 +1292,8 @@ void OSTreeRepo::pull(service::InstallTask &taskContext, progress, cancellable, &gErr); + ostree_async_progress_finish(progress); + g_main_context_unref(threadContext); if (status == FALSE) { taskContext.reportError(LINGLONG_ERRV("ostree_repo_pull", gErr)); return;