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];
|
||||
}
|
||||
|
||||
// No request yet, start one
|
||||
if (!this._groupProfilesPromise[groupId]) {
|
||||
this._groupProfilesPromise[groupId] = matrixClient.getGroupProfile(groupId);
|
||||
// A request is ongoing, wait for it to complete and return the group profile.
|
||||
if (this._groupProfilesPromise[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;
|
||||
try {
|
||||
profile = await this._groupProfilesPromise[groupId];
|
||||
} 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
|
||||
delete this._groupProfilesPromise[groupId];
|
||||
return;
|
||||
@ -179,6 +189,7 @@ class FlairStore extends EventEmitter {
|
||||
|
||||
/// XXX: This is verging on recreating a third "Flux"-looking Store. We really
|
||||
/// should replace FlairStore with a Flux store and some async actions.
|
||||
console.log('FlairStore: Emit updateGroupProfile for ' + groupId);
|
||||
this.emit('updateGroupProfile');
|
||||
|
||||
setTimeout(() => {
|
||||
|
Loading…
Reference in New Issue
Block a user