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