Skip to content

Commit a97bc05

Browse files
committed
Fix ProcessIdentifier construction across platforms
1 parent 38a92c2 commit a97bc05

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

Sources/Subprocess/PipeConfiguration.swift

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,16 @@ internal struct SendableCollectedResult: @unchecked Sendable {
273273
}
274274
}
275275

276+
private func currentProcessIdentifier() -> ProcessIdentifier {
277+
#if os(macOS)
278+
return .init(value: ProcessInfo.processInfo.processIdentifier)
279+
#elseif canImport(Glibc) || canImport(Android) || canImport(Musl)
280+
return .init(value: ProcessInfo.processInfo.processIdentifier, processDescriptor: -1)
281+
#elseif os(Windows)
282+
return .init(value: ProcessInfo.processInfo.processIdentifier, processDescriptor: nil, threadHandle: nil)
283+
#endif
284+
}
285+
276286
// MARK: - Internal Functions
277287

278288
extension PipeConfiguration {
@@ -446,7 +456,7 @@ extension PipeConfiguration {
446456
0,
447457
SendableCollectedResult(
448458
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
449-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
459+
processIdentifier: originalResult.processIdentifier,
450460
terminationStatus: originalResult.terminationStatus,
451461
standardOutput: (),
452462
standardError: ()
@@ -463,7 +473,7 @@ extension PipeConfiguration {
463473
0,
464474
SendableCollectedResult(
465475
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
466-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
476+
processIdentifier: originalResult.processIdentifier,
467477
terminationStatus: originalResult.terminationStatus,
468478
standardOutput: (),
469479
standardError: ()
@@ -482,7 +492,7 @@ extension PipeConfiguration {
482492
0,
483493
SendableCollectedResult(
484494
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
485-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
495+
processIdentifier: originalResult.processIdentifier,
486496
terminationStatus: originalResult.terminationStatus,
487497
standardOutput: (),
488498
standardError: ()
@@ -546,7 +556,7 @@ extension PipeConfiguration {
546556
0,
547557
SendableCollectedResult(
548558
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
549-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
559+
processIdentifier: currentProcessIdentifier(),
550560
terminationStatus: .exited(result),
551561
standardOutput: (),
552562
standardError: ()
@@ -581,7 +591,7 @@ extension PipeConfiguration {
581591
i,
582592
SendableCollectedResult(
583593
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
584-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
594+
processIdentifier: originalResult.processIdentifier,
585595
terminationStatus: originalResult.terminationStatus,
586596
standardOutput: (),
587597
standardError: ()
@@ -598,7 +608,7 @@ extension PipeConfiguration {
598608
i,
599609
SendableCollectedResult(
600610
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
601-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
611+
processIdentifier: originalResult.processIdentifier,
602612
terminationStatus: originalResult.terminationStatus,
603613
standardOutput: (),
604614
standardError: ()
@@ -617,7 +627,7 @@ extension PipeConfiguration {
617627
i,
618628
SendableCollectedResult(
619629
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
620-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
630+
processIdentifier: originalResult.processIdentifier,
621631
terminationStatus: originalResult.terminationStatus,
622632
standardOutput: (),
623633
standardError: ()
@@ -659,7 +669,7 @@ extension PipeConfiguration {
659669
i,
660670
SendableCollectedResult(
661671
CollectedResult<FileDescriptorOutput, DiscardedOutput>(
662-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
672+
processIdentifier: currentProcessIdentifier(),
663673
terminationStatus: .exited(result),
664674
standardOutput: (),
665675
standardError: ()
@@ -837,7 +847,7 @@ extension PipeConfiguration {
837847
lastIndex,
838848
SendableCollectedResult(
839849
CollectedResult<Output, DiscardedOutput>(
840-
processIdentifier: .init(value: ProcessInfo.processInfo.processIdentifier),
850+
processIdentifier: currentProcessIdentifier(),
841851
terminationStatus: .exited(result.0),
842852
standardOutput: result.1,
843853
standardError: ()

0 commit comments

Comments
 (0)