rbtrace 0.3.6 → 0.3.7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbtrace (0.3.6)
4
+ rbtrace (0.3.7)
5
5
  ffi (>= 1.0.5)
6
6
  msgpack (>= 0.4.3)
7
7
  trollop (>= 1.16.2)
data/bin/rbtrace CHANGED
@@ -43,6 +43,8 @@ module MsgQ
43
43
  end
44
44
 
45
45
  def self.recv_cmd(q, block=true)
46
+ MsgQ.enable_interrupt if RUBY_VERSION > '1.9'
47
+
46
48
  msg = EventMsg.new
47
49
  ret = MsgQ.msgrcv(q, msg, BUF_SIZE, 0, block ? 0 : IPC_NOWAIT)
48
50
  if ret == -1
@@ -54,6 +56,23 @@ module MsgQ
54
56
  end
55
57
 
56
58
  msg[:buf].to_ptr.read_string_length(BUF_SIZE)
59
+ ensure
60
+ MsgQ.disable_interrupt if RUBY_VERSION > '1.9'
61
+ end
62
+ end
63
+
64
+ if RUBY_VERSION > '1.9'
65
+ require 'fiddle'
66
+
67
+ handle = DL::Handle.new
68
+ @enable_interrupt = Fiddle::Function.new(handle['rb_enable_interrupt'], [], DL::TYPE_VOID)
69
+ @disable_interrupt = Fiddle::Function.new(handle['rb_disable_interrupt'], [], DL::TYPE_VOID)
70
+
71
+ def self.enable_interrupt
72
+ @enable_interrupt.call
73
+ end
74
+ def self.disable_interrupt
75
+ @disable_interrupt.call
57
76
  end
58
77
  end
59
78
 
@@ -616,7 +635,7 @@ class RBTracer
616
635
  parser = Trollop::Parser.new do
617
636
  version <<-EOS
618
637
  rbtrace: like strace, but for ruby code
619
- version 0.3.6
638
+ version 0.3.7
620
639
  (c) 2011 Aman Gupta (tmm1)
621
640
  http://github.com/tmm1/rbtrace
622
641
  EOS
data/ext/rbtrace.c CHANGED
@@ -27,9 +27,6 @@
27
27
  #define rb_sourceline() (ruby_current_node ? nd_line(ruby_current_node) : 0)
28
28
  #else
29
29
  #include <ruby/st.h>
30
- // this is a nasty hack, and will probably break on anything except 1.9.2p136
31
- int rb_thread_method_id_and_class(void *th, ID *idp, VALUE *klassp);
32
- RUBY_EXTERN void *ruby_current_thread;
33
30
  #endif
34
31
 
35
32
  #ifndef RSTRING_PTR
@@ -293,11 +290,10 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
293
290
  if (mid == ID_ALLOCATOR) goto out;
294
291
 
295
292
  #ifdef RUBY_VM
296
- // some serious 1.9.2 hax
297
- if (mid == 0 && ruby_current_thread) {
293
+ if (mid == 0) {
298
294
  ID _mid;
299
295
  VALUE _klass;
300
- rb_thread_method_id_and_class(ruby_current_thread, &_mid, &_klass);
296
+ rb_frame_method_id_and_class(&_mid, &_klass);
301
297
 
302
298
  mid = _mid;
303
299
  klass = _klass;
@@ -305,12 +301,20 @@ event_hook(rb_event_t event, NODE *node, VALUE self, ID mid, VALUE klass)
305
301
  #endif
306
302
 
307
303
  // normalize klass and check for class-level methods
308
- bool singleton = 0;
304
+ bool singleton = false;
309
305
  if (klass) {
310
306
  if (TYPE(klass) == T_ICLASS) {
311
307
  klass = RBASIC(klass)->klass;
312
308
  }
309
+
313
310
  singleton = FL_TEST(klass, FL_SINGLETON);
311
+
312
+ #ifdef RUBY_VM
313
+ if (singleton &&
314
+ !(TYPE(self) == T_CLASS ||
315
+ TYPE(self) == T_MODULE))
316
+ singleton = false;
317
+ #endif
314
318
  }
315
319
 
316
320
  rbtracer_t *tracer = NULL;
data/rbtrace.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbtrace'
3
- s.version = '0.3.6'
3
+ s.version = '0.3.7'
4
4
  s.homepage = 'http://github.com/tmm1/rbtrace'
5
5
 
6
6
  s.authors = 'Aman Gupta'
data/server.rb CHANGED
@@ -24,6 +24,7 @@ while true
24
24
  'hello'.multiply_vowels(3){ :ohai }
25
25
  sleep rand*0.5
26
26
 
27
+ ENV['blah']
27
28
  GC.start
28
29
 
29
30
  reload_test.call
@@ -0,0 +1 @@
1
+ Mongo::DB#command(selector, opts)
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbtrace
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 3
9
- - 6
10
- version: 0.3.6
8
+ - 7
9
+ version: 0.3.7
11
10
  platform: ruby
12
11
  authors:
13
12
  - Aman Gupta
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 29
30
28
  segments:
31
29
  - 1
32
30
  - 0
@@ -42,7 +40,6 @@ dependencies:
42
40
  requirements:
43
41
  - - ">="
44
42
  - !ruby/object:Gem::Version
45
- hash: 83
46
43
  segments:
47
44
  - 1
48
45
  - 16
@@ -58,7 +55,6 @@ dependencies:
58
55
  requirements:
59
56
  - - ">="
60
57
  - !ruby/object:Gem::Version
61
- hash: 9
62
58
  segments:
63
59
  - 0
64
60
  - 4
@@ -90,6 +86,7 @@ files:
90
86
  - tracers/activerecord.tracer
91
87
  - tracers/eventmachine.tracer
92
88
  - tracers/io.tracer
89
+ - tracers/mongo.tracer
93
90
  - tracers/redis.tracer
94
91
  - tracers/unicorn.tracer
95
92
  has_rdoc: true
@@ -106,7 +103,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
103
  requirements:
107
104
  - - ">="
108
105
  - !ruby/object:Gem::Version
109
- hash: 3
110
106
  segments:
111
107
  - 0
112
108
  version: "0"
@@ -115,14 +111,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
111
  requirements:
116
112
  - - ">="
117
113
  - !ruby/object:Gem::Version
118
- hash: 3
119
114
  segments:
120
115
  - 0
121
116
  version: "0"
122
117
  requirements: []
123
118
 
124
119
  rubyforge_project:
125
- rubygems_version: 1.4.2
120
+ rubygems_version: 1.3.7
126
121
  signing_key:
127
122
  specification_version: 3
128
123
  summary: "rbtrace: like strace but for ruby code"