Wrap handleRoomUpdate in a lock
Dev note: this is removed in a later commit
This commit is contained in:
parent
d14dd777b7
commit
0b6f744a58
1 changed files with 63 additions and 55 deletions
|
@ -33,6 +33,7 @@ import { FILTER_CHANGED, FilterPriority, IFilterCondition } from "../filters/IFi
|
|||
import { EffectiveMembership, getEffectiveMembership, splitRoomsByMembership } from "../membership";
|
||||
import { OrderingAlgorithm } from "./list-ordering/OrderingAlgorithm";
|
||||
import { getListAlgorithmInstance } from "./list-ordering";
|
||||
import AwaitLock from "await-lock";
|
||||
|
||||
// TODO: Add locking support to avoid concurrent writes? https://github.com/vector-im/riot-web/issues/14235
|
||||
|
||||
|
@ -66,6 +67,7 @@ export class Algorithm extends EventEmitter {
|
|||
} = {};
|
||||
private allowedByFilter: Map<IFilterCondition, Room[]> = new Map<IFilterCondition, Room[]>();
|
||||
private allowedRoomsByFilters: Set<Room> = new Set<Room>();
|
||||
private readonly lock = new AwaitLock();
|
||||
|
||||
public constructor() {
|
||||
super();
|
||||
|
@ -607,6 +609,9 @@ export class Algorithm extends EventEmitter {
|
|||
* processing.
|
||||
*/
|
||||
public async handleRoomUpdate(room: Room, cause: RoomUpdateCause): Promise<boolean> {
|
||||
try {
|
||||
await this.lock.acquireAsync();
|
||||
|
||||
if (!this.algorithms) throw new Error("Not ready: no algorithms to determine tags from");
|
||||
|
||||
if (cause === RoomUpdateCause.NewRoom) {
|
||||
|
@ -669,5 +674,8 @@ export class Algorithm extends EventEmitter {
|
|||
}
|
||||
|
||||
return true;
|
||||
} finally {
|
||||
this.lock.release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue