Skip to content

Commit abe085c

Browse files
atierianphantumcode
authored andcommitted
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 151ceb0 commit abe085c

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
@@ -54,11 +54,12 @@ extension FaceLivenessDetectionViewModel: FaceDetectionResultHandler {
5454
}
5555
}
5656
case .recording(ovalDisplayed: false):
57-
drawOval()
58-
sendInitialFaceDetectedEvent(
59-
initialFace: normalizedFace.boundingBox,
60-
videoStartTime: Date().timestampMilliseconds
61-
)
57+
drawOval(onComplete: {
58+
self.sendInitialFaceDetectedEvent(
59+
initialFace: normalizedFace.boundingBox,
60+
videoStartTime: Date().timestampMilliseconds
61+
)
62+
})
6263
case .recording(ovalDisplayed: true):
6364
guard let sessionConfiguration = sessionConfiguration else { return }
6465
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)