From 537297a6ded6f9efd6cd7af5f2189b59629a75fa Mon Sep 17 00:00:00 2001 From: Giovanni Campagna Date: Tue, 11 Sep 2012 00:44:28 +0200 Subject: [PATCH] MessageTray: fix reentrancy when calling out to the grab helper Similar to 683546. I'm not sure where this bug lives, but let's make the code robust. https://bugzilla.gnome.org/show_bug.cgi?id=683986 --- js/ui/messageTray.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index c213e923b..71ebb29a1 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -2277,6 +2277,18 @@ const MessageTray = new Lang.Class({ }, _hideNotification: function() { + // HACK! + // There seems to be a reentrancy issue in calling .ungrab() here, + // which causes _updateState to be called before _notificationState + // becomes HIDING. That hides the notification again, nullifying the + // object but not setting _notificationState (and that's the weird part) + // As then _notificationState is stuck into SHOWN but _notification + // is null, every new _updateState fails and the message tray is + // lost forever. + // + // See more at https://bugzilla.gnome.org/show_bug.cgi?id=683986 + this._notificationState = State.HIDING; + this._grabHelper.ungrab({ actor: this._notification.actor }); if (this._notificationExpandedId) {