lib/ruby_memcheck/stack.rb in ruby_memcheck-0.3.0 vs lib/ruby_memcheck/stack.rb in ruby_memcheck-1.0.0
- old
+ new
@@ -1,11 +1,39 @@
# frozen_string_literal: true
module RubyMemcheck
class Stack
- attr_reader :frames
+ attr_reader :configuration, :frames
def initialize(configuration, stack_xml)
+ @configuration = configuration
@frames = stack_xml.xpath("frame").map { |frame| Frame.new(configuration, frame) }
+ end
+
+ def skip?
+ in_binary = false
+
+ frames.each do |frame|
+ fn = frame.fn
+
+ if frame.in_ruby?
+ # If a stack from from the binary was encountered first, then this
+ # memory leak did not occur from Ruby
+ unless in_binary
+ # Skip this stack because it was called from Ruby
+ return true if configuration.skipped_ruby_functions.any? { |r| r.match?(fn) }
+ end
+ elsif frame.in_binary?
+ in_binary = true
+
+ # Skip the Init function because it is only ever called once, so
+ # leaks in it cannot cause memory bloat
+ return true if fn == "Init_#{configuration.binary_name}"
+ end
+ end
+
+ # Skip if the stack was never in the binary because it is very likely
+ # not a leak in the native gem
+ !in_binary
end
end
end