@@ -28,21 +28,28 @@ public final class Thread {
2828 let pointer = UnsafeMutablePointer < Void > ( OpaquePointer ( bitPattern: holder) )
2929
3030 #if os(Linux)
31+
3132 var internalThread : pthread_t = 0
32- #elseif os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
33- var internalThread : pthread_t ? = nil
34- #endif
35-
36- guard pthread_create ( & internalThread, nil , ThreadPrivateMain, pointer) == 0
37- else { throw POSIXError . fromErrno! }
38-
39- #if os(Linux)
33+
34+ guard pthread_create ( & internalThread, nil , ThreadPrivateMainLinux, pointer) == 0
35+ else { throw POSIXError . fromErrno! }
36+
4037 self . internalThread = internalThread
38+
39+ pthread_detach ( internalThread)
40+
4141 #elseif os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
42+
43+ var internalThread : pthread_t ? = nil
44+
45+ guard pthread_create ( & internalThread, nil , ThreadPrivateMainDarwin, pointer) == 0
46+ else { throw POSIXError . fromErrno! }
47+
4248 self . internalThread = internalThread!
49+
50+ pthread_detach ( internalThread!)
51+
4352 #endif
44-
45- pthread_detach ( internalThread!)
4653 }
4754
4855 // MARK: - Class Methods
@@ -73,16 +80,35 @@ public final class Thread {
7380
7481// MARK: - Private
7582
76- private func ThreadPrivateMain ( arg : UnsafeMutablePointer < Void > ) -> UnsafeMutablePointer < Void > ? {
83+ #if os(Linux) || XcodeLinux
7784
78- let unmanaged = Unmanaged< Thread . Closure> . fromOpaque( OpaquePointer ( arg) )
85+ private func ThreadPrivateMainLinux( arg: UnsafeMutablePointer < Void > ? ) -> UnsafeMutablePointer < Void > ? {
86+
87+ let unmanaged = Unmanaged< Thread . Closure> . fromOpaque( OpaquePointer ( arg!) )
88+
89+ unmanaged. takeUnretainedValue ( ) . closure ( )
90+
91+ unmanaged. release ( )
92+
93+ return nil
94+ }
7995
80- unmanaged. takeUnretainedValue ( ) . closure ( )
96+ #endif
97+
98+ #if os(OSX) || os(iOS) || os(watchOS) || os(tvOS)
8199
82- unmanaged. release ( )
100+ private func ThreadPrivateMainDarwin( arg: UnsafeMutablePointer < Void > ) -> UnsafeMutablePointer < Void > ? {
101+
102+ let unmanaged = Unmanaged< Thread . Closure> . fromOpaque( OpaquePointer ( arg) )
103+
104+ unmanaged. takeUnretainedValue ( ) . closure ( )
105+
106+ unmanaged. release ( )
107+
108+ return nil
109+ }
83110
84- return nil
85- }
111+ #endif
86112
87113private extension Thread {
88114
0 commit comments