Skip to content

Commit ab9066c

Browse files
authored
Merge pull request #75 from miketsprague/master
Fix race condition crash by removing unnecessary retain/release
2 parents 7d21bdd + bb4f692 commit ab9066c

File tree

1 file changed

+2
-11
lines changed

1 file changed

+2
-11
lines changed

Sources/NTPConnection.swift

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,9 @@ final class NTPConnection {
7272
func start(_ callbackQueue: DispatchQueue, onComplete: @escaping NTPConnectionCallback) {
7373
lockQueue.async {
7474
guard !self.started else { return }
75-
self.callbackPending = true
7675
var ctx = CFSocketContext(
7776
version: 0,
78-
info: UnsafeMutableRawPointer(Unmanaged.passRetained(self).toOpaque()),
77+
info: UnsafeMutableRawPointer(Unmanaged.passUnretained(self).toOpaque()),
7978
retain: nil,
8079
release: nil,
8180
copyDescription: nil
@@ -136,16 +135,13 @@ final class NTPConnection {
136135

137136
private let dataCallback: CFSocketCallBack = { socket, type, address, data, info in
138137
guard let info = info else { return }
139-
let retainedClient = Unmanaged<NTPConnection>.fromOpaque(info)
140-
let client = retainedClient.takeUnretainedValue()
138+
let client = Unmanaged<NTPConnection>.fromOpaque(info).takeUnretainedValue()
141139
guard let socket = socket, CFSocketIsValid(socket) else { return }
142140

143141
// Can't use switch here as these aren't defined as an enum.
144142
if type == .dataCallBack {
145143
let data = unsafeBitCast(data, to: CFData.self) as Data
146-
client.callbackPending = false
147144
client.handleResponse(data)
148-
retainedClient.release()
149145
} else if type == .writeCallBack {
150146
client.debugLog("Buffer \(client.address) writable - requesting time")
151147
client.requestTime()
@@ -169,7 +165,6 @@ final class NTPConnection {
169165
private var source: CFRunLoopSource?
170166
private var startTime: ntp_time_t?
171167
private var finished: Bool = false
172-
private var callbackPending: Bool = false
173168
}
174169

175170
extension NTPConnection: TimedOperation {
@@ -201,10 +196,6 @@ private extension NTPConnection {
201196
onComplete(self, result)
202197
}
203198
}
204-
if callbackPending {
205-
callbackPending = false
206-
Unmanaged.passUnretained(self).release()
207-
}
208199
}
209200

210201
func requestTime() {

0 commit comments

Comments
 (0)