[libnotify/fix-electron-crash] notification: Bookend calling NotifyActionCallback with temporary ref




commit 596d09a78fe1138e1ec4cba56b269631985e6b74
Author: Logan Rathbone <poprocks gmail com>
Date:   Wed May 4 16:23:03 2022 -0400

    notification: Bookend calling NotifyActionCallback with temporary ref
    
    Starting with d0778595, we access the Notification object after the
    NotifyActionCallback; some clients (eg, Electron) have historically
    unref'd the object at the end of the NotifyActionCallback. They probably
    should not have been doing so, but this hotfix adds an additional ref
    before and after the callback so that we don't break existing code.
    
    Fixes #25

 libnotify/notification.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
---
diff --git a/libnotify/notification.c b/libnotify/notification.c
index 482ee3e..18d7203 100644
--- a/libnotify/notification.c
+++ b/libnotify/notification.c
@@ -739,12 +739,19 @@ proxy_g_signal_cb (GDBusProxy *proxy,
                                 g_warning ("Received unknown action %s", action);
                         }
                 } else {
+                        /* Some clients have assumed it is safe to unref the
+                         * Notification at the end of their NotifyActionCallback
+                         * so we add a temporary ref until we're done with it.
+                         */
+                        g_object_ref (notification);
+
                         notification->priv->activating = TRUE;
                         pair->cb (notification, (char *) action, pair->user_data);
                         notification->priv->activating = FALSE;
-
                         g_free (notification->priv->activation_token);
                         notification->priv->activation_token = NULL;
+
+                        g_object_unref (notification);
                 }
         } else if (g_strcmp0 (signal_name, "ActivationToken") == 0 &&
                    g_variant_is_of_type (parameters, G_VARIANT_TYPE ("(us)"))) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]