ruby_memcheck 2.3.0 → 3.0.1

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: c504d614573dbdf5af31d106bc8977c66da56202826f303a25cadbb836bcc5dd
4
- data.tar.gz: c2c2a740907422ca9c6c1770c9b6541ee124c28df4851b5d997ababe9b2aaf92
3
+ metadata.gz: 7b355c60060a1d3a88b9bb7216eba3f2b0b286b084bcae72559447a3cd7c44cc
4
+ data.tar.gz: ff119d0a8850a483ad18cb7a7f05b34a0338b41782d2717e442be06ef22784b5
5
5
  SHA512:
6
- metadata.gz: 0aef4eda1c4bf979ff9a5f7cc6dccaf431fc5e0c8a7f6b6fee2e9b6bc8f48c8e4d64ffb0cc4d73219e15e8949fb32b7d3c2898bdccfa09a15c0859305ce1018e
7
- data.tar.gz: 523615be482fe107d2b7a46b1575d93f68d8dfc6e9f78c9107f206e466a4dfbe690be9ab479e8f07d0e260b3e5837db394c2b3e6d63c85c2130692bb0dcdd5ed
6
+ metadata.gz: a47edc485be9e7cfba605631576a69fc2a726be97b27b3e7aeb36ae65e18efaeba00ddc799bce147e40b20fcfa30f96cf19b595f4e6bd60265b1fe8d3eac3237
7
+ data.tar.gz: 3f58eee4a01327e67be1bf3d3b393841c955185cfdbf7c4da3759350c7397d0d5288988f1fc6b0724aca831315125f77da073ac4717b2ab6d6db8f08e28fc6c7
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -6,7 +6,5 @@ jobs:
6
6
  steps:
7
7
  - uses: actions/checkout@v2
8
8
  - uses: ruby/setup-ruby@v1
9
- with:
10
- ruby-version: '3.0'
11
9
  - run: bundle install --jobs=3 --retry=3 --path=vendor/bundle
12
10
  - run: bundle exec rubocop
@@ -10,6 +10,8 @@ jobs:
10
10
  - { ruby: '3.0', allowed-failure: false }
11
11
  - { ruby: '3.1', allowed-failure: false }
12
12
  - { ruby: '3.2', allowed-failure: false }
13
+ - { ruby: '3.3', allowed-failure: false }
14
+ - { ruby: '3.4', allowed-failure: false }
13
15
  - { ruby: ruby-head, allowed-failure: false }
14
16
  name: ruby ${{ matrix.entry.ruby }}
15
17
  steps:
data/.gitignore CHANGED
@@ -1,5 +1,3 @@
1
- Gemfile.lock
2
-
3
1
  /.bundle/
4
2
  /.yardoc
5
3
  /_yardoc/
data/.rubocop.yml CHANGED
@@ -2,7 +2,6 @@ inherit_gem:
2
2
  rubocop-shopify: rubocop.yml
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.6
6
5
  SuggestExtensions: false
7
6
 
8
7
  Style/GlobalVars:
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.4.1
data/Gemfile.lock ADDED
@@ -0,0 +1,66 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ruby_memcheck (3.0.0)
5
+ nokogiri
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ ast (2.4.2)
11
+ json (2.9.1)
12
+ language_server-protocol (3.17.0.3)
13
+ mini_portile2 (2.8.8)
14
+ minitest (5.25.4)
15
+ minitest-parallel_fork (2.0.0)
16
+ minitest (>= 5.15.0)
17
+ nokogiri (1.17.2)
18
+ mini_portile2 (~> 2.8.2)
19
+ racc (~> 1.4)
20
+ parallel (1.26.3)
21
+ parser (3.3.6.0)
22
+ ast (~> 2.4.1)
23
+ racc
24
+ racc (1.8.1)
25
+ rainbow (3.1.1)
26
+ rake (13.2.1)
27
+ rake-compiler (1.2.8)
28
+ rake
29
+ regexp_parser (2.10.0)
30
+ rspec-core (3.13.2)
31
+ rspec-support (~> 3.13.0)
32
+ rspec-support (3.13.1)
33
+ rubocop (1.69.2)
34
+ json (~> 2.3)
35
+ language_server-protocol (>= 3.17.0)
36
+ parallel (~> 1.10)
37
+ parser (>= 3.3.0.2)
38
+ rainbow (>= 2.2.2, < 4.0)
39
+ regexp_parser (>= 2.9.3, < 3.0)
40
+ rubocop-ast (>= 1.36.2, < 2.0)
41
+ ruby-progressbar (~> 1.7)
42
+ unicode-display_width (>= 2.4.0, < 4.0)
43
+ rubocop-ast (1.37.0)
44
+ parser (>= 3.3.1.0)
45
+ rubocop-shopify (2.15.1)
46
+ rubocop (~> 1.51)
47
+ ruby-progressbar (1.13.0)
48
+ unicode-display_width (3.1.3)
49
+ unicode-emoji (~> 4.0, >= 4.0.4)
50
+ unicode-emoji (4.0.4)
51
+
52
+ PLATFORMS
53
+ ruby
54
+
55
+ DEPENDENCIES
56
+ minitest (~> 5.0)
57
+ minitest-parallel_fork (~> 2.0)
58
+ rake (~> 13.0)
59
+ rake-compiler (~> 1.1)
60
+ rspec-core
61
+ rubocop (~> 1.22)
62
+ rubocop-shopify (~> 2.3)
63
+ ruby_memcheck!
64
+
65
+ BUNDLED WITH
66
+ 2.4.10
data/README.md CHANGED
@@ -163,6 +163,7 @@ If you want to override any of the default configurations you can call `RubyMemc
163
163
  - `temp_dir`: Optional. The directory to store temporary files. It defaults to a temporary directory. This is present for development debugging, so you shouldn't have to use it.
164
164
  - `output_io`: Optional. The `IO` object to output Valgrind errors to. Defaults to standard error.
165
165
  - `filter_all_errors`: Optional. Whether to filter all kinds of Valgrind errors (not just memory leaks). This feature should only be used if you're encountering a large number of illegal memory accesses coming from Ruby. If you need to use this feature, you may have found a bug inside of Ruby. Consider reporting it to the [Ruby bug tracker](https://bugs.ruby-lang.org/projects/ruby-master/issues/new). Defaults to `false`.
166
+ - `use_only_ruby_free_at_exit`: Optional. Use only the [`RUBY_FREE_AT_EXIT`](https://bugs.ruby-lang.org/issues/19993) feature introduced in Ruby 3.3 and disables most of the heuristics inside of ruby_memcheck. Disable this if you want to use the original heuristics. Defaults to `true` for Ruby 3.4 and later, `false` otherwise. Note: while `RUBY_FREE_AT_EXIT` was introduced in Ruby 3.3, there are bugs which prevents it from working well, so it is only enabled by default for Ruby 3.4 and later.
166
167
 
167
168
  ## Suppression files
168
169
 
@@ -195,6 +196,9 @@ Let's celebrate wins from this gem! If this gem was useful for you, please share
195
196
  - [`libxml2`](https://gitlab.gnome.org/GNOME/libxml2):
196
197
  - Found 1 memory leak: [memory leak from \`xmlSchemaValidateStream\` in v2.11.x (#530)](https://gitlab.gnome.org/GNOME/libxml2/-/issues/530)
197
198
  - Running in Nokogiri's CI pipeline: [#2868](https://github.com/sparklemotion/nokogiri/pull/2868)
199
+ - [`re2`](https://github.com/mudge/re2):
200
+ - Found 8 memory leaks: [#105](https://github.com/mudge/re2/pull/105)
201
+ - Running on CI: [#149](https://github.com/mudge/re2/pull/149)
198
202
 
199
203
  ## License
200
204
 
@@ -29,8 +29,10 @@ module RubyMemcheck
29
29
  /\Arb_rescue/,
30
30
  /\Arb_respond_to\z/,
31
31
  /\Arb_thread_create\z/, # Threads are relased to a cache, so they may be reported as a leak
32
+ /\Arb_vm_exec\z/,
32
33
  /\Arb_yield/,
33
34
  ].freeze
35
+ RUBY_FREE_AT_EXIT_SUPPORTED = Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("3.4.0")
34
36
 
35
37
  attr_reader :binary_name
36
38
  attr_reader :ruby
@@ -43,9 +45,11 @@ module RubyMemcheck
43
45
  attr_reader :loaded_features_file
44
46
  attr_reader :output_io
45
47
  attr_reader :filter_all_errors
48
+ attr_reader :use_only_ruby_free_at_exit
46
49
 
47
50
  alias_method :valgrind_generate_suppressions?, :valgrind_generate_suppressions
48
51
  alias_method :filter_all_errors?, :filter_all_errors
52
+ alias_method :use_only_ruby_free_at_exit?, :use_only_ruby_free_at_exit
49
53
 
50
54
  def initialize(
51
55
  binary_name: nil,
@@ -57,7 +61,8 @@ module RubyMemcheck
57
61
  skipped_ruby_functions: DEFAULT_SKIPPED_RUBY_FUNCTIONS,
58
62
  temp_dir: Dir.mktmpdir,
59
63
  output_io: $stderr,
60
- filter_all_errors: false
64
+ filter_all_errors: false,
65
+ use_only_ruby_free_at_exit: RUBY_FREE_AT_EXIT_SUPPORTED
61
66
  )
62
67
  @binary_name = binary_name
63
68
  @ruby = ruby
@@ -83,6 +88,8 @@ module RubyMemcheck
83
88
  ]
84
89
 
85
90
  @loaded_features_file = Tempfile.create("", @temp_dir)
91
+
92
+ @use_only_ruby_free_at_exit = use_only_ruby_free_at_exit
86
93
  end
87
94
 
88
95
  def command(*args)
@@ -94,6 +101,15 @@ module RubyMemcheck
94
101
  # ruby_init_stack (thread_pthread.c:871)
95
102
  # main (main.c:48)
96
103
  "ulimit -s unlimited && ",
104
+ # On some distros, and in some Docker containers, the number of file descriptors is set to a
105
+ # very high number like 1073741816 that valgrind >= 3.21.0 will error out on:
106
+ # --184100:0:libcfile Valgrind: FATAL: Private file creation failed.
107
+ # The current file descriptor limit is 1073741804.
108
+ # If you are running in Docker please consider
109
+ # lowering this limit with the shell built-in limit command.
110
+ # --184100:0:libcfile Exiting now.
111
+ # See https://bugs.kde.org/show_bug.cgi?id=465435 for background information.
112
+ "ulimit -n 8192 && ",
97
113
  valgrind,
98
114
  valgrind_options,
99
115
  valgrind_suppression_files.map { |f| "--suppressions=#{f}" },
@@ -10,6 +10,32 @@ module RubyMemcheck
10
10
  end
11
11
 
12
12
  def skip?
13
+ if @configuration.use_only_ruby_free_at_exit?
14
+ skip_using_ruby_free_at_exit?
15
+ else
16
+ skip_using_original_heuristics?
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def skip_using_ruby_free_at_exit?
23
+ if configuration.binary_name.nil?
24
+ false
25
+ else
26
+ in_binary = false
27
+
28
+ frames.each do |frame|
29
+ if frame.in_binary?
30
+ in_binary = true
31
+ end
32
+ end
33
+
34
+ !in_binary
35
+ end
36
+ end
37
+
38
+ def skip_using_original_heuristics?
13
39
  in_binary = false
14
40
 
15
41
  frames.each do |frame|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyMemcheck
4
- VERSION = "2.3.0"
4
+ VERSION = "3.0.1"
5
5
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = "Use Valgrind memcheck without going crazy"
12
12
  spec.homepage = "https://github.com/Shopify/ruby_memcheck"
13
13
  spec.license = "MIT"
14
- spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
14
+ spec.required_ruby_version = ">= 3.0.0"
15
15
 
16
16
  spec.metadata["homepage_uri"] = spec.homepage
17
17
 
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.add_dependency("nokogiri")
28
28
 
29
29
  spec.add_development_dependency("minitest", "~> 5.0")
30
- spec.add_development_dependency("minitest-parallel_fork", "~> 1.2")
30
+ spec.add_development_dependency("minitest-parallel_fork", "~> 2.0")
31
31
  spec.add_development_dependency("rake", "~> 13.0")
32
32
  spec.add_development_dependency("rake-compiler", "~> 1.1")
33
33
  spec.add_development_dependency("rspec-core")
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_memcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Zhu
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2023-12-21 00:00:00.000000000 Z
10
+ date: 2025-01-03 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: nokogiri
@@ -44,14 +43,14 @@ dependencies:
44
43
  requirements:
45
44
  - - "~>"
46
45
  - !ruby/object:Gem::Version
47
- version: '1.2'
46
+ version: '2.0'
48
47
  type: :development
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - "~>"
53
52
  - !ruby/object:Gem::Version
54
- version: '1.2'
53
+ version: '2.0'
55
54
  - !ruby/object:Gem::Dependency
56
55
  name: rake
57
56
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +121,6 @@ dependencies:
122
121
  - - "~>"
123
122
  - !ruby/object:Gem::Version
124
123
  version: '2.3'
125
- description:
126
124
  email:
127
125
  - peter@peterzhu.ca
128
126
  executables:
@@ -130,12 +128,15 @@ executables:
130
128
  extensions: []
131
129
  extra_rdoc_files: []
132
130
  files:
131
+ - ".github/dependabot.yml"
133
132
  - ".github/workflows/cla.yml"
134
133
  - ".github/workflows/lint.yml"
135
134
  - ".github/workflows/test.yml"
136
135
  - ".gitignore"
137
136
  - ".rubocop.yml"
137
+ - ".ruby-version"
138
138
  - Gemfile
139
+ - Gemfile.lock
139
140
  - LICENSE.txt
140
141
  - README.md
141
142
  - Rakefile
@@ -159,7 +160,6 @@ licenses:
159
160
  - MIT
160
161
  metadata:
161
162
  homepage_uri: https://github.com/Shopify/ruby_memcheck
162
- post_install_message:
163
163
  rdoc_options: []
164
164
  require_paths:
165
165
  - lib
@@ -167,15 +167,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
167
  requirements:
168
168
  - - ">="
169
169
  - !ruby/object:Gem::Version
170
- version: 2.3.0
170
+ version: 3.0.0
171
171
  required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  requirements:
173
173
  - - ">="
174
174
  - !ruby/object:Gem::Version
175
175
  version: '0'
176
176
  requirements: []
177
- rubygems_version: 3.4.10
178
- signing_key:
177
+ rubygems_version: 3.6.2
179
178
  specification_version: 4
180
179
  summary: Use Valgrind memcheck without going crazy
181
180
  test_files: []