ruby_memcheck 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16ee16450f130947ac172a2a7f7dcc7c0161fb3f7a851cd525e908533fed0ebc
4
- data.tar.gz: d3de0b6abf7d4c0e0226983fe45aa86403d0cfa3d28171d288c5ed29b0e276fb
3
+ metadata.gz: 5d5d9a9370f2c62f82adb6bccb89e003e7fd42662a3ea786fc6625689e55e85f
4
+ data.tar.gz: dc82e568dc90d505363dae4f486c1b2f849141328d0a4326ae7a0d8bfe712739
5
5
  SHA512:
6
- metadata.gz: aa62176e0585fecb9988d7f874b4207088317b1f97fa00a6b7d17e6336cabe0955a19957b34e6ce6efb496ee75a837b8eca3cc857733da6d7ecfe01e9ac05394
7
- data.tar.gz: 0e11133ec13c7e186aadb3bbcc99f85e0248c8891a66379bae6bd98836f4fc75f2928918382f94d14da650362c36a8283756e3a83ba37aff0e98ab226e6c17cb
6
+ metadata.gz: 4c0a004789b25d7407fd7ffcacdd3c155e73f1662f7fbeda7d8abc17b79d3dc24d5c7dafe95ee0b35cd48e860eec156293a5cdc1077f86148e979a6fab09144f
7
+ data.tar.gz: 06513eb0786d509df597c2efd929050669d8825bb09badd2d2f9d9ec9ee0df9bfa21ce43fbbc34f55d736b2c0eb0d497c96c658a5e7fe93a190633dcfb47bda8
@@ -23,9 +23,9 @@ jobs:
23
23
  - run: sudo apt-get install -y libc6-dbg
24
24
  - name: Install Valgrind from source
25
25
  run: |
26
- wget https://sourceware.org/pub/valgrind/valgrind-3.20.0.tar.bz2
27
- tar xvf valgrind-3.20.0.tar.bz2
28
- cd valgrind-3.20.0
26
+ wget https://sourceware.org/pub/valgrind/valgrind-3.21.0.tar.bz2
27
+ tar xvf valgrind-3.21.0.tar.bz2
28
+ cd valgrind-3.21.0
29
29
  ./configure
30
30
  make
31
31
  sudo make install
data/README.md CHANGED
@@ -9,7 +9,8 @@ This gem provides a sane way to use Valgrind's memcheck on your native extension
9
9
  1. [How does it work?](#how-does-it-work)
10
10
  1. [Limitations](#limitations)
11
11
  1. [Installation](#installation)
12
- 1. [Setup](#setup)
12
+ 1. [Running a Ruby script](#running-a-ruby-script)
13
+ 1. [Setup for test suites](#setup-for-test-suites)
13
14
  1. [Configuration](#configuration)
14
15
  1. [Suppression files](#suppression-files)
15
16
  1. [License](#license)
@@ -48,7 +49,16 @@ Because of the aggressive heuristics used to filter out false positives, there a
48
49
  gem install ruby_memcheck
49
50
  ```
50
51
 
51
- ## Setup
52
+ ## Running a Ruby script
53
+
54
+ You can run a Ruby script under ruby_memcheck. This will report all memory leaks in all native extensions found in your Ruby script. Simply replace the `ruby` part of your command with `ruby_memcheck`. For example:
55
+
56
+ ```sh
57
+ $ ruby_memcheck -e "puts 'Hello world'"
58
+ Hello world
59
+ ```
60
+
61
+ ## Setup for test suites
52
62
 
53
63
  > **Note**
54
64
  > If you encounter errors from Valgrind that looks like this:
@@ -61,15 +71,15 @@ gem install ruby_memcheck
61
71
  > You can install Valgrind from source using the following commands:
62
72
  > ```
63
73
  > sudo apt-get install -y libc6-dbg
64
- > wget https://sourceware.org/pub/valgrind/valgrind-3.20.0.tar.bz2
65
- > tar xvf valgrind-3.20.0.tar.bz2
66
- > cd valgrind-3.20.0
74
+ > wget https://sourceware.org/pub/valgrind/valgrind-3.21.0.tar.bz2
75
+ > tar xvf valgrind-3.21.0.tar.bz2
76
+ > cd valgrind-3.21.0
67
77
  > ./configure
68
78
  > make
69
79
  > sudo make install
70
80
  > ```
71
81
 
72
- The easiest way to use this gem is to use it on your test suite (minitest or RSpec) using rake.
82
+ You can use ruby_memcheck on your test suite (Minitest or RSpec) using rake.
73
83
 
74
84
  0. Install Valgrind.
75
85
  1. In your Rakefile, require this gem.
data/exe/ruby_memcheck ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ $LOAD_PATH.unshift("#{__dir__}/../lib")
5
+
6
+ require "ruby_memcheck"
7
+
8
+ runner = RubyMemcheck::RubyRunner.new
9
+ exit(runner.run(*ARGV))
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyMemcheck
4
+ class RubyRunner
5
+ attr_reader :configuration
6
+ attr_reader :reporter
7
+
8
+ def initialize(*args)
9
+ @configuration =
10
+ if !args.empty? && args[0].is_a?(Configuration)
11
+ args.shift
12
+ else
13
+ RubyMemcheck.default_configuration
14
+ end
15
+ end
16
+
17
+ def run(*args, **options)
18
+ command = configuration.command(args.map { |a| Shellwords.escape(a) })
19
+
20
+ @reporter = TestTaskReporter.new(configuration)
21
+
22
+ @reporter.setup
23
+
24
+ system(command, options)
25
+ exit_code = $CHILD_STATUS.exitstatus
26
+
27
+ @reporter.report_valgrind_errors
28
+
29
+ exit_code
30
+ end
31
+ end
32
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyMemcheck
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
data/lib/ruby_memcheck.rb CHANGED
@@ -1,10 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "English"
4
+ require "shellwords"
3
5
  require "tempfile"
4
6
  require "rake/testtask"
5
7
 
6
8
  require "ruby_memcheck/configuration"
7
9
  require "ruby_memcheck/frame"
10
+ require "ruby_memcheck/ruby_runner"
8
11
  require "ruby_memcheck/stack"
9
12
  require "ruby_memcheck/test_task_reporter"
10
13
  require "ruby_memcheck/test_task"
@@ -12,13 +12,6 @@
12
12
  fun:require_internal
13
13
  ...
14
14
  }
15
- {
16
- Remove this after Ruby 2.7.7, 3.0.5, 3.1.3 are relased. See: https://github.com/Shopify/ruby_memcheck/issues/6
17
- Memcheck:Leak
18
- ...
19
- fun:stack_chunk_alloc
20
- ...
21
- }
22
15
  {
23
16
  recursive_list_access creates a hash called `list` that is stored on the threadptr_recursive_hash. This is reported as a memory leak.
24
17
  Memcheck:Leak
@@ -58,3 +51,12 @@
58
51
  fun:strscan_do_scan
59
52
  ...
60
53
  }
54
+ {
55
+ The callcache table (RCLASS_CC_TBL) is lazily created, so it is allocated when the first method that gets cached. If this happens in a native extension, it may be reported as a memory leak.
56
+ Memcheck:Leak
57
+ ...
58
+ fun:rb_id_table_create
59
+ ...
60
+ fun:rb_callable_method_entry
61
+ ...
62
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_memcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Zhu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-04 00:00:00.000000000 Z
11
+ date: 2023-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -125,7 +125,8 @@ dependencies:
125
125
  description:
126
126
  email:
127
127
  - peter@peterzhu.ca
128
- executables: []
128
+ executables:
129
+ - ruby_memcheck
129
130
  extensions: []
130
131
  extra_rdoc_files: []
131
132
  files:
@@ -138,10 +139,12 @@ files:
138
139
  - LICENSE.txt
139
140
  - README.md
140
141
  - Rakefile
142
+ - exe/ruby_memcheck
141
143
  - lib/ruby_memcheck.rb
142
144
  - lib/ruby_memcheck/configuration.rb
143
145
  - lib/ruby_memcheck/frame.rb
144
146
  - lib/ruby_memcheck/rspec/rake_task.rb
147
+ - lib/ruby_memcheck/ruby_runner.rb
145
148
  - lib/ruby_memcheck/stack.rb
146
149
  - lib/ruby_memcheck/suppression.rb
147
150
  - lib/ruby_memcheck/test_helper.rb