@@ -257,6 +257,24 @@ private let _childProcessContinuations:
257
257
258
258
private let signalSource : SendableSourceSignal = SendableSourceSignal ( )
259
259
260
+ private extension siginfo_t {
261
+ var si_status : Int32 {
262
+ #if canImport(Glibc)
263
+ return _sifields. _sigchld. si_status
264
+ #elseif canImport(Musl)
265
+ return __si_fields. __si_common. __second. __sigchld. si_status
266
+ #endif
267
+ }
268
+
269
+ var si_pid : pid_t {
270
+ #if canImport(Glibc)
271
+ return _sifields. _sigchld. si_pid
272
+ #elseif canImport(Musl)
273
+ return __si_fields. __si_common. __first. __piduid. si_pid
274
+ #endif
275
+ }
276
+ }
277
+
260
278
private let setup : ( ) = {
261
279
signalSource. setEventHandler {
262
280
_childProcessContinuations. withLock { continuations in
@@ -268,9 +286,9 @@ private let setup: () = {
268
286
var status : TerminationStatus ? = nil
269
287
switch siginfo. si_code {
270
288
case . init( CLD_EXITED) :
271
- status = . exited( siginfo. _sifields . _sigchld . si_status)
289
+ status = . exited( siginfo. si_status)
272
290
case . init( CLD_KILLED) , . init( CLD_DUMPED) :
273
- status = . unhandledException( siginfo. _sifields . _sigchld . si_status)
291
+ status = . unhandledException( siginfo. si_status)
274
292
case . init( CLD_TRAPPED) , . init( CLD_STOPPED) , . init( CLD_CONTINUED) :
275
293
// Ignore these signals because they are not related to
276
294
// process exiting
@@ -279,7 +297,7 @@ private let setup: () = {
279
297
fatalError ( " Unexpected exit status: \( siginfo. si_code) " )
280
298
}
281
299
if let status = status {
282
- let pid = siginfo. _sifields . _sigchld . si_pid
300
+ let pid = siginfo. si_pid
283
301
if let existing = continuations. removeValue ( forKey: pid) ,
284
302
case . continuation( let c) = existing
285
303
{
0 commit comments