PeerConnectionClient thread safety.

pull/1/head
Matthew Chen 8 years ago
parent 078da69ee0
commit 7eab0569b6

@ -449,9 +449,8 @@ private class SignalCallData: NSObject {
self.handleFailedCall(failedCall: call, error: .obsoleteCall(description:"obsolete call in \(#function)"))
return
}
guard callData.call == call else {
self.handleFailedCall(failedCall: call, error: .obsoleteCall(description:"obsolete call in \(#function)"))
Logger.warn("\(self.logTag) ignoring \(#function) for call other than current call")
return
}
@ -746,6 +745,7 @@ private class SignalCallData: NSObject {
* Remote client (could be caller or callee) sent us a connectivity update
*/
public func handleRemoteAddedIceCandidate(thread: TSContactThread, callId: UInt64, sdp: String, lineIndex: Int32, mid: String) {
SwiftAssertIsOnMainThread(#function)
Logger.verbose("\(logTag) \(#function) callId: \(callId)")
guard let callData = self.callData else {
@ -1001,7 +1001,7 @@ private class SignalCallData: NSObject {
Logger.info("\(self.logTag) in \(#function)")
SwiftAssertIsOnMainThread(#function)
guard let peerConnectionClient = self.peerConnectionClient else {
guard let peerConnectionClient = callData.peerConnectionClient else {
OWSProdError(OWSAnalyticsEvents.callServicePeerConnectionMissing(), file: #file, function: #function, line: #line)
handleFailedCall(failedCall: call, error: CallError.assertionError(description: "\(self.logTag) peerConnectionClient unexpectedly nil in \(#function)"))
return

@ -412,7 +412,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
}
peerConnection.offer(for: strongSelf.defaultOfferConstraints, completionHandler: { (sdp: RTCSessionDescription?, error: Error?) in
PeerConnectionClient.signalingQueue.async {
PeerConnectionClient.signalingQueue.async { [weak self] in
completion(sdp, error)
}
})
@ -549,7 +549,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
Logger.debug("\(strongSelf.logTag) negotiating answer session.")
peerConnection.answer(for: constraints, completionHandler: { (sdp: RTCSessionDescription?, error: Error?) in
PeerConnectionClient.signalingQueue.async {
PeerConnectionClient.signalingQueue.async { [weak self] in
completion(sdp, error)
}
})
@ -608,6 +608,10 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
localVideoTrack?.isEnabled = false
remoteVideoTrack?.isEnabled = false
if let dataChannel = self.dataChannel {
dataChannel.delegate = nil
}
dataChannel = nil
audioSender = nil
audioTrack = nil
@ -701,7 +705,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
return
}
DispatchQueue.main.async {
DispatchQueue.main.async { [weak self] in
completion(dataChannelMessage)
}
}
@ -751,7 +755,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
strongSelf.remoteVideoTrack = remoteVideoTrack
DispatchQueue.main.async {
DispatchQueue.main.async { [weak self] in
completion(remoteVideoTrack)
}
}
@ -842,7 +846,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
return
}
Logger.info("\(strongSelf.logTag) adding local ICE candidate:\(candidate.sdp)")
DispatchQueue.main.async {
DispatchQueue.main.async { [weak self] in
completion(candidate)
}
}
@ -883,7 +887,7 @@ class PeerConnectionClient: NSObject, RTCPeerConnectionDelegate, RTCDataChannelD
let pendingMessages = strongSelf.pendingDataChannelMessages
strongSelf.pendingDataChannelMessages = []
DispatchQueue.main.async {
DispatchQueue.main.async { [weak self] in
completion(pendingMessages)
}
}

Loading…
Cancel
Save