leak_profiler 0.7.5 → 0.7.6

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: 7b9ed880d59ba3afb26bc0c8842545114d800d2e4466bde187118c70ea489ca4
4
- data.tar.gz: 9ac75655078d74b67928439f0ffb0493635075fee3226ebb4c37de6236bebd33
3
+ metadata.gz: 72f8b0c66ed134b82f8c7c4a5c1c19939962a8bd7cd2227df7e6e1fb695eaceb
4
+ data.tar.gz: 5e0a015723cb449c3cf3154f7d47da2e7ef20e001c8ae3d3b8a2339699cb11c9
5
5
  SHA512:
6
- metadata.gz: 3e2ca40923c1f4baa23266d4f84b811af144e7f5c9feacdc054df13817066bd8c608ba55b99f5f9f50e471d17ce00938a3646e02962ba776b9b02e81ad86c594
7
- data.tar.gz: b8290c21265e17360816dd9f332f976a695c53d590b12aaeeb48324516ace274a88c47fc8bd43dff2d91686b263563de5472941183fcfd82aa0ae7c12456c491
6
+ metadata.gz: a8f4690f3a25c4169118b32560ab0f7bdc8d4199324bbff2b319582c736d4af2cd60233ce6278b3532f4bc64af348bc42ebe3e079c053a0997f49e60d9f3a9ea
7
+ data.tar.gz: adbaa8e3ca6968e3fe257d628e4a335b3e65a189f45893c7418bc166c1e01ffa87417c11e2ee30e5e87f89ff1d849f025616856743f32a690665c6cbd1e1b593
@@ -6,6 +6,9 @@ require 'objspace'
6
6
 
7
7
  class LeakProfiler
8
8
  class Allocations
9
+ UNKNOWN = '<unknown>:<unknown>'
10
+ private_constant :UNKNOWN
11
+
9
12
  attr_reader :thread
10
13
 
11
14
  # @rbs logger: untyped
@@ -37,8 +40,6 @@ class LeakProfiler
37
40
  end
38
41
 
39
42
  key = allocated_location(obj)
40
- next unless key
41
-
42
43
  allocations[key][:metrics] ||= Hash.new { |h, k| h[k] = 0 }
43
44
  allocations[key][:metrics][:count] += 1
44
45
  allocations[key][:metrics][:bytes] += ObjectSpace.memsize_of(obj)
@@ -84,7 +85,9 @@ class LeakProfiler
84
85
  return if @max_referrers <= 0
85
86
 
86
87
  @logger.add(Logger::Severity::INFO, "Referrers #{"-" * 80}")
87
- sort(allocations).take(@max_referrers).each do |key, value|
88
+
89
+ objs = allocations.reject { |k, _| k == UNKNOWN }
90
+ sort(objs).take(@max_referrers).each do |key, value|
88
91
  referrer_objects = detect_referrer_objects(value[:sample_object])
89
92
 
90
93
  logs = referrer_objects.map do |r|
@@ -106,8 +109,6 @@ class LeakProfiler
106
109
  begin
107
110
  if r&.any? { |o| o.equal?(object) }
108
111
  key = allocated_location(obj)
109
- next unless key
110
-
111
112
  referrer_objects << { referrer_object: obj, referrer_object_allocated_line: key }
112
113
  end
113
114
  rescue StandardError
@@ -117,9 +118,12 @@ class LeakProfiler
117
118
  end
118
119
 
119
120
  def allocated_location(obj)
120
- return unless ObjectSpace.allocation_sourcefile(obj)
121
+ file = ObjectSpace.allocation_sourcefile(obj)
122
+ return UNKNOWN if file.nil? || file.empty?
123
+
124
+ line = ObjectSpace.allocation_sourceline(obj)
121
125
 
122
- "#{ObjectSpace.allocation_sourcefile(obj)}:#{ObjectSpace.allocation_sourceline(obj)}"
126
+ "#{file}:#{line}"
123
127
  end
124
128
 
125
129
  def sort(allocations)
@@ -2,6 +2,8 @@
2
2
 
3
3
  class LeakProfiler
4
4
  class Allocations
5
+ UNKNOWN: ::String
6
+
5
7
  attr_reader thread: untyped
6
8
 
7
9
  # @rbs logger: untyped
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: leak_profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.5
4
+ version: 0.7.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Watson
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2025-09-09 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: logger
@@ -57,6 +58,7 @@ metadata:
57
58
  homepage_uri: https://github.com/Watson1978/leak_profiler
58
59
  source_code_uri: https://github.com/Watson1978/leak_profiler
59
60
  rubygems_mfa_required: 'true'
61
+ post_install_message:
60
62
  rdoc_options: []
61
63
  require_paths:
62
64
  - lib
@@ -71,7 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
71
73
  - !ruby/object:Gem::Version
72
74
  version: '0'
73
75
  requirements: []
74
- rubygems_version: 3.6.9
76
+ rubygems_version: 3.5.22
77
+ signing_key:
75
78
  specification_version: 4
76
79
  summary: A simple profiler for Ruby to detect memory leak.
77
80
  test_files: []