Skip to content

Conversation

@jhawthorn
Copy link
Owner

Based on #82

I think there's more I can simplify here still. After implementing all of it I'm not sure that pause/resume need to be separate from start/stop.

I'll also want to make something more efficient than running ObjectSpace.each_object on every fork. This also does leave a possible race condition where if you are spawning new threads which are themselves making new profiles as you fork we may miss one to disable, but I'm reasonably happy ignoring that for now.

byroot and others added 11 commits December 11, 2024 23:13
Otherwise the child will hang forever on exit when trying to
dump the profiling data. Which is problematic when trying to
profile some programs.

There might be more elegant ways to handle it, this is mostly
a proof of concept.

Also it's not quite fully working, the test passes alone, but
but if ran after some other specific tests, it end up in a
SIGTRAP, which I'm not sure why:

```
bundle exec rake SEED=26641 TESTOPTS="-v"
...

 1) Failure:
TestVernier#test_that_forked_children_do_not_hang [test/test_vernier.rb:15]:
Expected #<Process::Status: pid 63146 SIGTRAP (signal 5)>
 to be success?.

```
@jdelStrother
Copy link

Would love to see something like this merged - it took me a while to figure out that the reason vernier seemed to be hanging forever was a chunk of code using Parallel.map (which forks processes by default)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants