[gnome-shell] background: fix a race condition when loading several animations
- From: Michael Biebl <mbiebl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] background: fix a race condition when loading several animations
- Date: Mon, 7 Sep 2015 04:55:13 +0000 (UTC)
commit 8a4c86263362c0b2d2f87b21b8f783ccc5690bf8
Author: Josselin Mouette <joss debian org>
Date: Fri Dec 12 21:57:11 2014 +0100
background: fix a race condition when loading several animations
When loading several animations at the same time, the last call
overrides the result for all of them.
This commit caches all animations separately based on the source's
schemas.
https://bugzilla.gnome.org/show_bug.cgi?id=741453
js/ui/background.js | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
---
diff --git a/js/ui/background.js b/js/ui/background.js
index a463452..e2f9a47 100644
--- a/js/ui/background.js
+++ b/js/ui/background.js
@@ -144,6 +144,7 @@ const BackgroundCache = new Lang.Class({
this._pendingFileLoads = [];
this._fileMonitors = {};
this._backgroundSources = {};
+ this._animations = {};
},
monitorFile: function(file) {
@@ -162,12 +163,13 @@ const BackgroundCache = new Lang.Class({
getAnimation: function(params) {
params = Params.parse(params, { file: null,
+ settingsSchema: null,
onLoaded: null });
- if (_fileEqual0(this._animationFile, params.file)) {
+ if (this._animations[params.settingsSchema] && _fileEqual0(this._animationFile, params.file)) {
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
- params.onLoaded(this._animation);
+ params.onLoaded(this._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -178,12 +180,11 @@ const BackgroundCache = new Lang.Class({
let animation = new Animation({ file: params.file });
animation.load(Lang.bind(this, function() {
- this._animationFile = params.file;
- this._animation = animation;
+ this._animations[params.settingsSchema] = animation;
if (params.onLoaded) {
let id = GLib.idle_add(GLib.PRIORITY_DEFAULT, Lang.bind(this, function() {
- params.onLoaded(this._animation);
+ params.onLoaded(this._animations[params.settingsSchema]);
return GLib.SOURCE_REMOVE;
}));
GLib.Source.set_name_by_id(id, '[gnome-shell] params.onLoaded');
@@ -403,6 +404,7 @@ const Background = new Lang.Class({
_loadAnimation: function(file) {
this._cache.getAnimation({ file: file,
+ settingsSchema: this._settings.schema_id,
onLoaded: Lang.bind(this, function(animation) {
this._animation = animation;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]