diff options
author | Alan Wu <XrXr@users.noreply.github.com> | 2023-03-15 14:19:22 -0400 |
---|---|---|
committer | Alan Wu <XrXr@users.noreply.github.com> | 2023-03-16 10:46:30 -0400 |
commit | 2f81bb793fd217374054ee78cb5cd595cfacf9fe (patch) | |
tree | 6c95425e8afecfc22cb08a65b6347bffc654ae5d | |
parent | e0cf80d666d4b5df3229f030a16d10d21323508e (diff) |
Add thread and ractor counts to bug reports
This is useful for crash triaging. It also helps to hint extension
developers about the misuse of `rb_thread_call_without_gvl()`.
Example:
$ ./miniruby -e 'Ractor.new{Ractor.receive};
Thread.new{sleep}; Process.kill:SEGV,Process.pid'
<snip>
-- Threading information ---------------------------------------------------
Total ractor count: 2
Ruby thread count for this ractor: 2
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7532
-rw-r--r-- | test/ruby/test_rubyoptions.rb | 3 | ||||
-rw-r--r-- | vm_dump.c | 8 |
2 files changed, 11 insertions, 0 deletions
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb index 13d720be9e..64d8d93d3f 100644 --- a/test/ruby/test_rubyoptions.rb +++ b/test/ruby/test_rubyoptions.rb @@ -755,6 +755,9 @@ class TestRubyOptions < Test::Unit::TestCase )? )x, %r( + (?:--\sThreading(?:.+\n)*\n)? + )x, + %r( (?:--\sMachine(?:.+\n)*\n)? )x, %r( @@ -1083,6 +1083,14 @@ rb_vm_bugreport(const void *ctx) SDR(); rb_backtrace_print_as_bugreport(); fputs("\n", stderr); + // If we get here, hopefully things are intact enough that + // we can read these two numbers. It is an estimate because + // we are reading without synchronization. + fprintf(stderr, "-- Threading information " + "---------------------------------------------------\n"); + fprintf(stderr, "Total ractor count: %u\n", vm->ractor.cnt); + fprintf(stderr, "Ruby thread count for this ractor: %u\n", rb_ec_ractor_ptr(ec)->threads.cnt); + fputs("\n", stderr); } rb_dump_machine_register(ctx); |