Fix race condition

pull/190/head
nielsandriesse 5 years ago
parent f7c0515ce8
commit 0f84a5581a

@ -264,6 +264,8 @@ public final class FriendRequestProtocol : NSObject {
}
// The envelope source is set during UD decryption
let hexEncodedPublicKey = envelope.source!
// Don't handle a friend request if we're already handling a session request from someone
guard !SessionManagementProtocol.inFlightSessionRequests.contains(hexEncodedPublicKey) else { return }
// The envelope type is set during UD decryption.
guard envelope.type == .friendRequest else {
print("[Loki] Ignoring friend request logic for non friend request type envelope.")

@ -14,6 +14,9 @@ public final class SessionManagementProtocol : NSObject {
internal static var storage: OWSPrimaryStorage { OWSPrimaryStorage.shared() }
/// The session requests that are currently being handled.
public static var inFlightSessionRequests: Set<String> = []
// MARK: - General
// BEHAVIOR NOTE: OWSMessageSender.throws_encryptedMessageForMessageSend:recipientId:plaintext:transaction: sets
// isFriendRequest to true if the message in question is a friend request or a device linking request, but NOT if
@ -192,6 +195,7 @@ public final class SessionManagementProtocol : NSObject {
public static func handleSessionRequestMessage(_ dataMessage: SSKProtoDataMessage, wrappedIn envelope: SSKProtoEnvelope, using transaction: YapDatabaseReadWriteTransaction) {
// The envelope source is set during UD decryption
let hexEncodedPublicKey = envelope.source!
inFlightSessionRequests.insert(hexEncodedPublicKey)
var closedGroupMembers: Set<String> = []
TSGroupThread.enumerateCollectionObjects(with: transaction) { object, _ in
guard let group = object as? TSGroupThread, group.groupModel.groupType == .closedGroup,
@ -208,6 +212,7 @@ public final class SessionManagementProtocol : NSObject {
let ephemeralMessage = EphemeralMessage(in: thread)
let messageSenderJobQueue = SSKEnvironment.shared.messageSenderJobQueue
messageSenderJobQueue.add(message: ephemeralMessage, transaction: transaction)
inFlightSessionRequests.remove(hexEncodedPublicKey)
}
}
}

Loading…
Cancel
Save