summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2023-03-15 14:19:22 -0400
committerAlan Wu <XrXr@users.noreply.github.com>2023-03-16 10:46:30 -0400
commit2f81bb793fd217374054ee78cb5cd595cfacf9fe (patch)
tree6c95425e8afecfc22cb08a65b6347bffc654ae5d
parente0cf80d666d4b5df3229f030a16d10d21323508e (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.rb3
-rw-r--r--vm_dump.c8
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(
diff --git a/vm_dump.c b/vm_dump.c
index 00e82078fd..fae34d72aa 100644
--- a/vm_dump.c
+++ b/vm_dump.c
@@ -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);