ensure member.dispose is called when removing member

so expiration timer is always stopped
This commit is contained in:
Bruno Windels 2022-10-06 15:20:05 +02:00
parent 56ecd39f26
commit 7eb8015ace

View File

@ -105,6 +105,7 @@ export class GroupCall extends EventEmitter<{change: never}> {
const memberKey = getMemberKey(member.userId, member.deviceId); const memberKey = getMemberKey(member.userId, member.deviceId);
// only remove expired members from the call if we don't have a peer conn with them // only remove expired members from the call if we don't have a peer conn with them
if (member.isExpired && !member.isConnected) { if (member.isExpired && !member.isConnected) {
member.dispose();
this._members.remove(memberKey); this._members.remove(memberKey);
} else { } else {
if (member.isExpired && member.isConnected) { if (member.isExpired && member.isConnected) {
@ -339,6 +340,7 @@ export class GroupCall extends EventEmitter<{change: never}> {
log.wrap({l: "update device membership", id: memberKey, sessionId: device.session_id}, log => { log.wrap({l: "update device membership", id: memberKey, sessionId: device.session_id}, log => {
if (isMemberExpired(device, now)) { if (isMemberExpired(device, now)) {
log.set("expired", true); log.set("expired", true);
this._members.get(memberKey)?.dispose();
this._members.remove(memberKey); this._members.remove(memberKey);
return; return;
} }
@ -354,6 +356,7 @@ export class GroupCall extends EventEmitter<{change: never}> {
if (disconnectLogItem) { if (disconnectLogItem) {
log.refDetached(disconnectLogItem); log.refDetached(disconnectLogItem);
} }
member.dispose();
this._members.remove(memberKey); this._members.remove(memberKey);
member = undefined; member = undefined;
} }
@ -462,11 +465,12 @@ export class GroupCall extends EventEmitter<{change: never}> {
const member = this._members.get(memberKey); const member = this._members.get(memberKey);
if (member) { if (member) {
log.set("leave", true); log.set("leave", true);
this._members.remove(memberKey);
const disconnectLogItem = member.disconnect(false); const disconnectLogItem = member.disconnect(false);
if (disconnectLogItem) { if (disconnectLogItem) {
log.refDetached(disconnectLogItem); log.refDetached(disconnectLogItem);
} }
member.dispose();
this._members.remove(memberKey);
} }
this.emitChange(); this.emitChange();
}); });