Skip to content

Commit 18c23bf

Browse files
authored
fix: data race causing multiple initial events and crash with low net… (#40)
* fix: data race causing multiple initial events and crash with low network throughput * invoke oncomplete
1 parent eb0dd55 commit 18c23bf

File tree

3 files changed

+10
-7
lines changed

3 files changed

+10
-7
lines changed

Sources/FaceLiveness/AV/VideoChunker.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ final class VideoChunker {
3333
}
3434

3535
func start() {
36+
guard state == .pending else { return }
3637
state = .writing
3738
assetWriter.startWriting()
3839
assetWriter.startSession(atSourceTime: .zero)

Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel+FaceDetectionResultHandler.swift

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,12 @@ extension FaceLivenessDetectionViewModel: FaceDetectionResultHandler {
4848
return
4949
}
5050
case .recording(ovalDisplayed: false):
51-
drawOval()
52-
sendInitialFaceDetectedEvent(
53-
initialFace: normalizedFace.boundingBox,
54-
videoStartTime: Date().timestampMilliseconds
55-
)
51+
drawOval(onComplete: {
52+
self.sendInitialFaceDetectedEvent(
53+
initialFace: normalizedFace.boundingBox,
54+
videoStartTime: Date().timestampMilliseconds
55+
)
56+
})
5657
case .recording(ovalDisplayed: true):
5758
guard let sessionConfiguration = sessionConfiguration else { return }
5859
let instruction = faceInOvalMatching.faceMatchState(

Sources/FaceLiveness/Views/Liveness/FaceLivenessDetectionViewModel.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,7 @@ class FaceLivenessDetectionViewModel: ObservableObject {
134134
}
135135
}
136136

137-
138-
func drawOval() {
137+
func drawOval(onComplete: @escaping () -> Void) {
139138
guard livenessState.state == .recording(ovalDisplayed: false),
140139
let ovalParameters = sessionConfiguration?.ovalMatchChallenge.oval
141140
else { return }
@@ -158,6 +157,7 @@ class FaceLivenessDetectionViewModel: ObservableObject {
158157
livenessViewControllerDelegate?.drawOvalInCanvas(normalizedOvalRect)
159158
DispatchQueue.main.async {
160159
self.livenessState.ovalDisplayed()
160+
onComplete()
161161
}
162162
ovalRect = normalizedOvalRect
163163
}
@@ -212,6 +212,7 @@ class FaceLivenessDetectionViewModel: ObservableObject {
212212
initialFace: CGRect,
213213
videoStartTime: UInt64
214214
) {
215+
guard initialClientEvent == nil else { return }
215216
videoChunker.start()
216217

217218
let initialFace = FaceDetection(

0 commit comments

Comments
 (0)