diff --git a/stdlib/private/SwiftPrivateThreadExtras/SwiftPrivateThreadExtras.swift b/stdlib/private/SwiftPrivateThreadExtras/SwiftPrivateThreadExtras.swift index 906dd18880393..1b6ec49e2fbb6 100644 --- a/stdlib/private/SwiftPrivateThreadExtras/SwiftPrivateThreadExtras.swift +++ b/stdlib/private/SwiftPrivateThreadExtras/SwiftPrivateThreadExtras.swift @@ -117,17 +117,18 @@ public func _stdlib_thread_join( ) -> (CInt, Result?) { #if os(Windows) let result = WaitForSingleObject(thread, INFINITE) - if result == WAIT_OBJECT_0 { - var threadResult: DWORD = 0 - GetExitCodeThread(thread, &threadResult) - CloseHandle(thread) - - return (CInt(result), - UnsafeMutablePointer(&threadResult) - .withMemoryRebound(to: Result.self, capacity: 1){ $0.pointee }) - } else { - return (CInt(result), nil) + guard result == WAIT_OBJECT_0 else { return (CInt(result), nil) } + + var dwResult: DWORD = 0 + GetExitCodeThread(thread, &dwResult) + CloseHandle(thread) + + let value: Result = withUnsafePointer(to: &dwResult) { + $0.withMemoryRebound(to: Result.self, capacity: 1) { + $0.pointee + } } + return (CInt(result), value) #else var threadResultRawPtr: UnsafeMutableRawPointer? let result = pthread_join(thread, &threadResultRawPtr)