Skip to content

Commit 17d1ad4

Browse files
authored
fix: fixes race condition that could lead to multiple start completion invocations (#429)
1 parent cb270ec commit 17d1ad4

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

LaunchDarkly/LaunchDarkly/LDClient.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -827,24 +827,25 @@ public class LDClient {
827827
}
828828

829829
static func start(serviceFactory: ClientServiceCreating?, config: LDConfig, context: LDContext? = nil, startWaitSeconds: TimeInterval, completion: ((_ timedOut: Bool) -> Void)? = nil) {
830-
var completed = true
830+
var completed = false
831831
let internalCompletedQueue: DispatchQueue = DispatchQueue(label: "TimeOutQueue")
832832
if !config.startOnline {
833833
start(serviceFactory: serviceFactory, config: config, context: context)
834-
completion?(completed)
834+
completion?(true) // offline is considered a short circuited timed out case
835835
} else {
836836
let startTime = Date().timeIntervalSince1970
837837
start(serviceFactory: serviceFactory, config: config, context: context) {
838838
internalCompletedQueue.async {
839-
if startTime + startWaitSeconds > Date().timeIntervalSince1970 && completed {
840-
completed = false
841-
completion?(completed)
839+
if startTime + startWaitSeconds > Date().timeIntervalSince1970 && !completed {
840+
completed = true
841+
completion?(false) // false for not timedOut
842842
}
843843
}
844844
}
845845
internalCompletedQueue.asyncAfter(deadline: .now() + startWaitSeconds) {
846-
if completed {
847-
completion?(completed)
846+
if !completed {
847+
completed = true
848+
completion?(true) // true for timedOut
848849
}
849850
}
850851
}

0 commit comments

Comments
 (0)