JohnSundell / JohnSundell/ShellOut

NSInternalInconsistencyException occurs when shellOut is run too many times

Open
#79 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Swift
Stars
888
Forks
87
PR merge metrics
No merged PRs in 30d

Description

I've already opened a [PR](https://github.com/JohnSundell/ShellOut/pull/78) for this issue, but wanted to open an issue for documenting purposes.

Copy-pasta from the PR description:

---

I have a Swift CLI that utilizes ShellOut to interact with binary executables. When I use `shellOut` too many times, I sometimes hit an exception that looks something like:
```
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Failed to set posix_spawn_file_actions for fd -1 at index 0 with errno 9'
*** First throw call stack:
(
0 CoreFoundation 0x00000001859672ec __exceptionPreprocess + 176
1 libobjc.A.dylib 0x000000018544e788 objc_exception_throw + 60
2 Foundation 0x0000000186a92eb4 -[NSConcreteTask launchWithDictionary:error:] + 4240
```

I've been able to determine this is due to the `Pipe` objects from ShellOut not being closed properly.

I've included an example project that demonstrates the issue:
[NSExceptionExample.zip](https://github.com/user-attachments/files/15527111/NSExceptionExample.zip)

Steps:

1. Unzip the example library and `cd NSExceptionExample`
2. Run `swift run NSExceptionExample`
3. While that command is still running, in a separate terminal window, run `ps aux | grep NSExceptionExample` and take note of the PID.
4. Run `lsof -p | wc -l`
5. Notice how this number is quite large. Also notice that running again shows the number increasing.
6. If the `swift` command runs long enough, you'll hit an exception like the above.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.