Repository navigation
Conversation
gaborcsardi
force-pushed
the
quit-kill-parallel
branch
from
November 13, 2026 14:37
7d0c8f9 to
a3ca45c
Compare
ps::ps_kill_parallel() was never released, so cleanup on GC and on session quit failed. Use ps::ps_kill() for the process tree instead, with the grace period converted to milliseconds. Kill the process group of each process via processx's own handle, as the old C finalizer did, so cleanup = TRUE kills the whole group again and works without ps support. ps is only used for cleanup_tree = TRUE, and only if ps supports the platform. Errors are caught for each process, so one failure does not stop the others from being cleaned up. Only call into R from the C finalizer if cleanup = TRUE. Replace the parallel cleanup test, which used an undefined helper, with px-based tests for group kill, grace period and parallel kill on session quit. Update C line numbers in error snapshots. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
|
I updated this to be current, but in the end I am not going to merge it. It is very hard to get this code right, it would only have real effect if we changed the default for the grace period to be non-zero, and that seems like a difficult change, considering that it would effect many packages that clean up subprocesses serially. I.e. it would potentially make those serial process cleanups much slower. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Branched from #367.
Split process cleanup into GC-specific finalisers and a global session-quit finaliser. The session finaliser collects all living processes and optionally their trees, and uses the new
ps::ps_kill_parallel()to kill them in parallel with a grace delay controlled bycleanup_grace.On creation, the cleanup info for the session finaliser is recorded in a doubly linked list that keeps track of living processes. It's doubly linked so that on GC of a process the node can be efficiently removed.