# UNDF: UNDF-2026-000001150 --- a/apps/meteor/server/services/video-conference/service.ts +++ b/apps/meteor/server/services/video-conference/service.ts @@ -529,12 +529,14 @@ export class VideoConferenceService extends ServiceClassInternal implements IVid private async endDirectCall(call: IDirectVideoConference): Promise { const params = { rid: call.rid, uid: call.createdBy._id, callId: call._id }; // Notify the caller that the call was ended by the server this.notifyUser(call.createdBy._id, 'end', params); // If the callee hasn't joined the call yet, notify them that it has already ended const subscriptions = await Subscriptions.findByRoomIdAndNotUserId(call.rid, call.createdBy._id, { projection: { 'u._id': 1, '_id': 0 }, }).toArray(); + // Build a Set so the joined-user lookup is O(1) per subscription + // instead of O(U) per subscription (O(S*U) overall) via Array.find(). + const joinedUserIds = new Set(call.users.map(({ _id }) => _id)); for (const subscription of subscriptions) { // Skip notifying users that already joined the call - if (call.users.find(({ _id }) => _id === subscription.u._id)) { + if (joinedUserIds.has(subscription.u._id)) { continue; } this.notifyUser(subscription.u._id, 'end', params); } }