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
|
// _updateState() figures out what (if anything) needs to be done
|
||||||
// at the present time.
|
// at the present time.
|
||||||
_updateState: function() {
|
_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.
|
// Filter out acknowledged notifications.
|
||||||
this._notificationQueue = this._notificationQueue.filter(function(n) {
|
this._notificationQueue = this._notificationQueue.filter(function(n) {
|
||||||
return !n.acknowledged;
|
return !n.acknowledged;
|
||||||
@ -2436,6 +2443,8 @@ const MessageTray = new Lang.Class({
|
|||||||
this._showDesktopClone();
|
this._showDesktopClone();
|
||||||
else if (desktopCloneIsVisible && !desktopCloneShouldBeVisible)
|
else if (desktopCloneIsVisible && !desktopCloneShouldBeVisible)
|
||||||
this._hideDesktopClone();
|
this._hideDesktopClone();
|
||||||
|
|
||||||
|
this._updatingState = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
_tween: function(actor, statevar, value, params) {
|
_tween: function(actor, statevar, value, params) {
|
||||||
|
Loading…
Reference in New Issue
Block a user