Skip to content

Commit 8e208b1

Browse files
committed
bump websocket version again
1 parent 8c9a93f commit 8e208b1

File tree

1 file changed

+18
-21
lines changed

1 file changed

+18
-21
lines changed

Source/WebSocket.swift

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -301,23 +301,25 @@ public class WebSocket : NSObject, NSStreamDelegate {
301301
CFWriteStreamSetDispatchQueue(outStream, WebSocket.sharedWorkQueue)
302302
inStream.open()
303303
outStream.open()
304+
305+
self.mutex.lock()
306+
self.readyToWrite = true
307+
self.mutex.unlock()
308+
304309
let bytes = UnsafePointer<UInt8>(data.bytes)
305310
var timeout = 5000000 //wait 5 seconds before giving up
306311
writeQueue.addOperationWithBlock { [unowned self] in
307312
while !outStream.hasSpaceAvailable {
308313
usleep(100) //wait until the socket is ready
309314
timeout -= 100
310315
if timeout < 0 {
311-
self.disconnectStream(self.errorWithDetail("write wait timed out", code: 2))
312-
return
313-
} else if let error = outStream.streamError {
314-
self.disconnectStream(error)
316+
self.cleanupStream()
317+
self.doDisconnect(self.errorWithDetail("write wait timed out", code: 2))
315318
return
319+
} else if outStream.streamError != nil {
320+
return //disconnectStream will be called.
316321
}
317322
}
318-
self.mutex.lock()
319-
self.readyToWrite = true
320-
self.mutex.unlock()
321323
outStream.write(bytes, maxLength: data.length)
322324
}
323325
}
@@ -350,6 +352,13 @@ public class WebSocket : NSObject, NSStreamDelegate {
350352
//disconnect the stream object
351353
private func disconnectStream(error: NSError?) {
352354
writeQueue.waitUntilAllOperationsAreFinished()
355+
cleanupStream()
356+
doDisconnect(error)
357+
}
358+
359+
private func cleanupStream() {
360+
outputStream?.delegate = nil
361+
inputStream?.delegate = nil
353362
if let stream = inputStream {
354363
CFReadStreamSetDispatchQueue(stream, nil)
355364
stream.close()
@@ -359,8 +368,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
359368
stream.close()
360369
}
361370
outputStream = nil
362-
certValidated = false
363-
doDisconnect(error)
371+
inputStream = nil
364372
}
365373

366374
///handles the incoming bytes and sending them to the proper processing method
@@ -800,18 +808,7 @@ public class WebSocket : NSObject, NSStreamDelegate {
800808
mutex.lock()
801809
readyToWrite = false
802810
mutex.unlock()
803-
outputStream?.delegate = nil
804-
inputStream?.delegate = nil
805-
if let stream = inputStream {
806-
CFReadStreamSetDispatchQueue(stream, nil)
807-
stream.close()
808-
}
809-
if let stream = outputStream {
810-
CFWriteStreamSetDispatchQueue(stream, nil)
811-
stream.close()
812-
}
813-
outputStream = nil
814-
inputStream = nil
811+
cleanupStream()
815812
}
816813

817814
}

0 commit comments

Comments
 (0)