messageTray: Prevent reentrancy issues in _updateState
The methods we call in _updateState may not be reentrant, so make sure that we never get into a situation where _updateState, through some crazy chain of events, calls itself. https://bugzilla.gnome.org/show_bug.cgi?id=711694
This commit is contained in:
parent
c85145d73c
commit
87f0e79749
@ -2356,6 +2356,13 @@ const MessageTray = new Lang.Class({
|
||||
// _updateState() figures out what (if anything) needs to be done
|
||||
// at the present time.
|
||||
_updateState: function() {
|
||||
// If our state changes caused _updateState to be called,
|
||||
// just exit now to prevent reentrancy issues.
|
||||
if (this._updatingState)
|
||||
return;
|
||||
|
||||
this._updatingState = true;
|
||||
|
||||
// Filter out acknowledged notifications.
|
||||
this._notificationQueue = this._notificationQueue.filter(function(n) {
|
||||
return !n.acknowledged;
|
||||
@ -2436,6 +2443,8 @@ const MessageTray = new Lang.Class({
|
||||
this._showDesktopClone();
|
||||
else if (desktopCloneIsVisible && !desktopCloneShouldBeVisible)
|
||||
this._hideDesktopClone();
|
||||
|
||||
this._updatingState = false;
|
||||
},
|
||||
|
||||
_tween: function(actor, statevar, value, params) {
|
||||
|
Loading…
Reference in New Issue
Block a user