stackprof 0.2.22 → 0.2.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8e473c6b4408f04dc69f4abd425ab68896b4f705adadd467ded771003eb84da1
4
- data.tar.gz: 5bfaa3c22d7e59271f65136b0237cddc4d1a97edf9650db4caf53c9b36fda55e
3
+ metadata.gz: db2506be248e74ed4aefacbb3b7adc4936c88b1acb3517fde5510a225704b6bf
4
+ data.tar.gz: 55aaefff3de2d6887cb9a861eb615faa85e48411eeadf778990bc1439e7c456e
5
5
  SHA512:
6
- metadata.gz: eb0ffc8bac6c1c66b13ce67d89bac3fbd1c601754024c3e8455e194a35e58f3c515586aa0ffeee4e30985a6e140ce64724c0960dce8de67d8a3e0f0e912d3898
7
- data.tar.gz: 4cfc9aa211ab10a7b0a0c222e94538311bd91950fa32fc0602e2535468df4c48158219cad2f2f6fee015f94a9b415c3a285406fcc66ab27676a6572492b2d7f9
6
+ metadata.gz: e761d5f7da7687ecb51ecc493c3dc4ff8e86798b57cd65c429b90e29e4021827df58525b5ddd2d21d597cba4a31e251909daa33d518157d63c53e74944784fde
7
+ data.tar.gz: a8c9da37e92aa2bcc64b2532367f749e5568cfa4e02758dca80d3d3f1b4f399b860dd215f880cea814356d50766103dc684f0192a04660075b5be6e43a7db121
data/bin/stackprof CHANGED
@@ -6,27 +6,27 @@ if ARGV.first == "run"
6
6
  ARGV.shift
7
7
  env = {}
8
8
  parser = OptionParser.new(ARGV) do |o|
9
- o.banner = "Usage: stackprof run [--mode|--out|--interval] -- COMMAND"
9
+ o.banner = "Usage: stackprof run [--mode=MODE|--out=FILE|--interval=INTERVAL|--format=FORMAT] -- COMMAND"
10
10
  o.banner = "Usage: stackprof [file.dump]+ [--text|--method=NAME|--callgrind|--graphviz]"
11
11
 
12
- o.on('--mode', 'Mode of sampling: cpu, wall, object, default to wall') do |mode|
12
+ o.on('--mode [MODE]', String, 'Mode of sampling: cpu, wall, object, default to wall') do |mode|
13
13
  env["STACKPROF_MODE"] = mode
14
14
  end
15
15
 
16
- o.on('--out', 'The target file, which will be overwritten. Defaults to a random temporary file') do |out|
16
+ o.on('--out [FILENAME]', String, 'The target file, which will be overwritten. Defaults to a random temporary file') do |out|
17
17
  env['STACKPROF_OUT'] = out
18
18
  end
19
19
 
20
- o.on('--interval', 'Mode-relative sample rate') do |interval|
21
- env['STACKPROF_INTERVAL'] = Integer(interval).to_s
20
+ o.on('--interval [MILLISECONDS]', Integer, 'Mode-relative sample rate') do |interval|
21
+ env['STACKPROF_INTERVAL'] = interval.to_s
22
22
  end
23
23
 
24
- o.on('--raw', 'collects the extra data required by the --flamegraph and --stackcollapse report types') do
25
- env['STACKPROF_RAW'] = '1'
24
+ o.on('--raw', 'collects the extra data required by the --flamegraph and --stackcollapse report types') do |raw|
25
+ env['STACKPROF_RAW'] = raw.to_s
26
26
  end
27
27
 
28
- o.on('--ignore-gc', 'Ignore garbage collection frames') do
29
- env['STACKPROF_IGNORE_GC'] = '1'
28
+ o.on('--ignore-gc', 'Ignore garbage collection frames') do |gc|
29
+ env['STACKPROF_IGNORE_GC'] = gc.to_s
30
30
  end
31
31
  end
32
32
  parser.parse!
@@ -125,6 +125,8 @@ static struct {
125
125
  sample_time_t buffer_time;
126
126
  VALUE frames_buffer[BUF_SIZE];
127
127
  int lines_buffer[BUF_SIZE];
128
+
129
+ pthread_t target_thread;
128
130
  } _stackprof;
129
131
 
130
132
  static VALUE sym_object, sym_wall, sym_cpu, sym_custom, sym_name, sym_file, sym_line;
@@ -219,6 +221,7 @@ stackprof_start(int argc, VALUE *argv, VALUE self)
219
221
  _stackprof.ignore_gc = ignore_gc;
220
222
  _stackprof.metadata = metadata;
221
223
  _stackprof.out = out;
224
+ _stackprof.target_thread = pthread_self();
222
225
 
223
226
  if (raw) {
224
227
  capture_timestamp(&_stackprof.last_sample_at);
@@ -721,7 +724,22 @@ stackprof_signal_handler(int sig, siginfo_t *sinfo, void *ucontext)
721
724
  _stackprof.overall_signals++;
722
725
 
723
726
  if (!_stackprof.running) return;
724
- if (!ruby_native_thread_p()) return;
727
+
728
+ if (_stackprof.mode == sym_wall) {
729
+ // In "wall" mode, the SIGALRM signal will arrive at an arbitrary thread.
730
+ // In order to provide more useful results, especially under threaded web
731
+ // servers, we want to forward this signal to the original thread
732
+ // StackProf was started from.
733
+ // According to POSIX.1-2008 TC1 pthread_kill and pthread_self should be
734
+ // async-signal-safe.
735
+ if (pthread_self() != _stackprof.target_thread) {
736
+ pthread_kill(_stackprof.target_thread, sig);
737
+ return;
738
+ }
739
+ } else {
740
+ if (!ruby_native_thread_p()) return;
741
+ }
742
+
725
743
  if (pthread_mutex_trylock(&lock)) return;
726
744
 
727
745
  if (!_stackprof.ignore_gc && rb_during_gc()) {
data/lib/stackprof.rb CHANGED
@@ -9,7 +9,7 @@ if defined?(RubyVM::YJIT) && RubyVM::YJIT.enabled?
9
9
  end
10
10
 
11
11
  module StackProf
12
- VERSION = '0.2.22'
12
+ VERSION = '0.2.23'
13
13
  end
14
14
 
15
15
  StackProf.autoload :Report, "stackprof/report.rb"
data/stackprof.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'stackprof'
3
- s.version = '0.2.22'
3
+ s.version = '0.2.23'
4
4
  s.homepage = 'http://github.com/tmm1/stackprof'
5
5
 
6
6
  s.authors = 'Aman Gupta'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stackprof
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.22
4
+ version: 0.2.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aman Gupta
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-13 00:00:00.000000000 Z
11
+ date: 2022-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -99,10 +99,10 @@ licenses:
99
99
  - MIT
100
100
  metadata:
101
101
  bug_tracker_uri: https://github.com/tmm1/stackprof/issues
102
- changelog_uri: https://github.com/tmm1/stackprof/blob/v0.2.22/CHANGELOG.md
103
- documentation_uri: https://www.rubydoc.info/gems/stackprof/0.2.22
104
- source_code_uri: https://github.com/tmm1/stackprof/tree/v0.2.22
105
- post_install_message:
102
+ changelog_uri: https://github.com/tmm1/stackprof/blob/v0.2.23/CHANGELOG.md
103
+ documentation_uri: https://www.rubydoc.info/gems/stackprof/0.2.23
104
+ source_code_uri: https://github.com/tmm1/stackprof/tree/v0.2.23
105
+ post_install_message:
106
106
  rdoc_options: []
107
107
  require_paths:
108
108
  - lib
@@ -117,8 +117,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  requirements: []
120
- rubygems_version: 3.0.3.1
121
- signing_key:
120
+ rubygems_version: 3.3.23
121
+ signing_key:
122
122
  specification_version: 4
123
123
  summary: sampling callstack-profiler for ruby 2.2+
124
124
  test_files: []