mirror of
https://github.com/vector-im/element-web.git
synced 2024-11-17 05:55:00 +08:00
Potentially fix a memory leak in FlairStore
For each successful request of a group profile, we previously emitted an `updateGroupProfile` event per caller of `getGroupProfileCached`. This is sub-optimal because only a single event emit is required to update the views listening. It's possible that this was enabling some race to cause a memory leak but this is not certain, hence the extra logging for future debugging.
This commit is contained in:
parent
9a7a7ea2d6
commit
afbd563810
@ -154,16 +154,26 @@ class FlairStore extends EventEmitter {
|
|||||||
return this._groupProfiles[groupId];
|
return this._groupProfiles[groupId];
|
||||||
}
|
}
|
||||||
|
|
||||||
// No request yet, start one
|
// A request is ongoing, wait for it to complete and return the group profile.
|
||||||
if (!this._groupProfilesPromise[groupId]) {
|
if (this._groupProfilesPromise[groupId]) {
|
||||||
this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId);
|
try {
|
||||||
|
await this._groupProfilesPromise[groupId];
|
||||||
|
} catch (e) {
|
||||||
|
// Don't log the error; this is done below
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
return this._groupProfiles[groupId];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// No request yet, start one
|
||||||
|
console.log('FlairStore: Request group profile of ' + groupId);
|
||||||
|
this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId).delay(5000);
|
||||||
|
|
||||||
let profile;
|
let profile;
|
||||||
try {
|
try {
|
||||||
profile = await this._groupProfilesPromise[groupId];
|
profile = await this._groupProfilesPromise[groupId];
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log('Failed to get group profile for ' + groupId, e);
|
console.log('FlairStore: Failed to get group profile for ' + groupId, e);
|
||||||
// Don't retry, but allow a retry when the profile is next requested
|
// Don't retry, but allow a retry when the profile is next requested
|
||||||
delete this._groupProfilesPromise[groupId];
|
delete this._groupProfilesPromise[groupId];
|
||||||
return;
|
return;
|
||||||
@ -179,6 +189,7 @@ class FlairStore extends EventEmitter {
|
|||||||
|
|
||||||
/// XXX: This is verging on recreating a third "Flux"-looking Store. We really
|
/// XXX: This is verging on recreating a third "Flux"-looking Store. We really
|
||||||
/// should replace FlairStore with a Flux store and some async actions.
|
/// should replace FlairStore with a Flux store and some async actions.
|
||||||
|
console.log('FlairStore: Emit updateGroupProfile for ' + groupId);
|
||||||
this.emit('updateGroupProfile');
|
this.emit('updateGroupProfile');
|
||||||
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
Loading…
Reference in New Issue
Block a user