summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Wu <XrXr@users.noreply.github.com>2021-03-06 11:05:55 -0500
committerAlan Wu <XrXr@users.noreply.github.com>2021-10-20 18:19:31 -0400
commit7f7e79d80221949f93c7ded7cbd8d26afd3dea1d (patch)
treeb6c73e1bf59154e7ea4df0c372d1c746cf6a1915
parenteaab6605b75a2510f5cf0ae781817de3b7d6e39f (diff)
downloadruby-7f7e79d80221949f93c7ded7cbd8d26afd3dea1d.tar.gz
YJIT: handle when all counters are zero in printout code
Also filter with not equal to zero instead of greater than zero, in case there is memory corruption and counters are negative. Fixes Shopify/ruby#70
-rw-r--r--ujit.rb7
1 files changed, 6 insertions, 1 deletions
diff --git a/ujit.rb b/ujit.rb
index a2f61b1021..d27d200daf 100644
--- a/ujit.rb
+++ b/ujit.rb
@@ -67,9 +67,14 @@ module UJIT
def print_counters(counters, prefix:, prompt:)
$stderr.puts(prompt)
counters = counters.filter { |key, _| key.start_with?(prefix) }
- counters.filter! { |_, value| value > 0 }
+ counters.filter! { |_, value| value != 0 }
counters.transform_keys! { |key| key.to_s.delete_prefix(prefix) }
+ if counters.empty?
+ $stderr.puts(" (all relevant counters are zero)")
+ return
+ end
+
counters = counters.to_a
counters.sort_by! { |(_, counter_value)| counter_value }
longest_name_length = counters.max_by { |(name, _)| name.length }.first.length