From 839c3f4c54ae6015b07f32a94a6dfe57607b94fb Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 4 Dec 2025 09:46:07 +0100 Subject: [PATCH] fix(linux/crash): fix crash in cloud provider integration when removing a sync folder avoid removing a ref on a GObject instance that we do not own Signed-off-by: Matthieu Gallien --- src/gui/cloudproviders/cloudproviderwrapper.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/gui/cloudproviders/cloudproviderwrapper.cpp b/src/gui/cloudproviders/cloudproviderwrapper.cpp index 666c161664fff..5d0dad7ff2feb 100644 --- a/src/gui/cloudproviders/cloudproviderwrapper.cpp +++ b/src/gui/cloudproviders/cloudproviderwrapper.cpp @@ -21,6 +21,8 @@ using namespace OCC; +Q_LOGGING_CATEGORY(lcNextcloudCloudProviderIntegration, "nextcloud.cloudprovider.integration", QtInfoMsg) + GSimpleActionGroup *actionGroup = nullptr; int CloudProviderWrapper::preferredTextWidth = 0; @@ -55,6 +57,11 @@ CloudProviderWrapper::CloudProviderWrapper(QObject *parent, Folder *folder, int g_clear_object (&action_group); } +void mainMenuWasDeleted(gpointer data, GObject *where_the_object_was) +{ + qCDebug(lcNextcloudCloudProviderIntegration) << "I was deleted" << data << where_the_object_was; +} + CloudProviderWrapper::~CloudProviderWrapper() { g_object_unref(_cloudProviderAccount); @@ -222,6 +229,8 @@ GMenuModel* CloudProviderWrapper::getMenuModel() { GMenuItem* item = nullptr; _mainMenu = g_menu_new(); + g_object_ref(_mainMenu); + g_object_weak_ref(reinterpret_cast(_mainMenu), mainMenuWasDeleted, this); section = g_menu_new(); item = addMenuItem(tr("Open %1 Desktop", "Open Nextcloud main window. Placeholer will be the application name. Please keep it.").arg(APPLICATION_NAME), "cloudprovider.openmaindialog");