objspace_helpers 0.0.1 → 0.0.2

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
  SHA1:
3
- metadata.gz: c64bb3dba9f6e3592d48191859735a4a982057d4
4
- data.tar.gz: af65ffc525b86d06a64c0bcd75852512408bee98
3
+ metadata.gz: d0175d9d52d2d5fdc414e9b5e9cda0475dcf33bd
4
+ data.tar.gz: 5c92f3b27147ecef0e63a55332a3c72262d78f68
5
5
  SHA512:
6
- metadata.gz: 07223b0ee7fe06143270fd91f66f07da4a324e832e57875b4941bd3059eb9e40da01dbae0e127624f21dc0a012c9c6a855cd682e8ece0a7e6b69716d97052621
7
- data.tar.gz: 31e9b72f8f15653f86b2853965470504b82c9165370315a8ba520b4d98df8360023f0490b4affe5ef74ccad0e39cc88c3f2758dd5f8fd73485c02044006df4cc
6
+ metadata.gz: 4a31190183b4d4d8b1d348720dd4a974c3fed2410184dcaeac3ffdef6263785cde179398581cb60b2b518e723470a82cf5926193270c5cdbd25363bcbd893c60
7
+ data.tar.gz: ec1a6ff89ac9d196d12eb791ab8abf0f70b993e7d5b552b6f51691a25b663e63999173d0930daa2b6a2f12ce622f542186670fb2b9cc6fe3ed80093945acd9bf
@@ -1,5 +1,5 @@
1
1
  require 'mkmf'
2
2
 
3
- $objs = ["objspace_info.o", "objspace_helpers.o"]
3
+ $objs = ["id2ref.o", "objspace_info.o", "objspace_helpers.o"]
4
4
 
5
5
  create_makefile 'objspace_helpers/objspace_helpers'
@@ -1,3 +1,4 @@
1
+ #include <objspace_helpers.h>
1
2
  #include <objspace_info.h>
2
3
 
3
4
  void Init_objspace_helpers(void);
@@ -8,7 +9,7 @@ collect_addresses(void *vstart, void *vend, size_t stride, void *data)
8
9
  VALUE v = (VALUE)vstart;
9
10
  for (; v != (VALUE)vend; v += stride) {
10
11
  if (RBASIC(v)->flags)
11
- rb_ary_push((VALUE) data, INT2FIX((void *)v));
12
+ rb_ary_push((VALUE) data, rb_obj_id(v));
12
13
  }
13
14
  return 0;
14
15
  }
@@ -30,21 +31,36 @@ static VALUE oh_addresses_to_info(VALUE self, VALUE ary)
30
31
  for (i = 0; i < RARRAY_LEN(ary); i += 1) {
31
32
  obj_addr = rb_ary_entry(ary, i);
32
33
  info_hash = rb_hash_new();
33
- objspace_info(FIX2PTR(obj_addr), info_hash);
34
+ objspace_info(oh_id2ref(self, obj_addr), info_hash);
34
35
  rb_hash_aset(hash, obj_addr, info_hash);
35
36
  }
36
37
 
37
38
  return hash;
38
39
  }
39
40
 
40
- static VALUE oh_address_of_obj(VALUE self, VALUE obj)
41
+ static void
42
+ reachable_object_i(VALUE ref, void *data)
41
43
  {
42
- return PTR2FIX(obj);
44
+ rb_ary_push((VALUE)data, rb_obj_id(ref));
43
45
  }
44
46
 
45
- static VALUE oh_obj_for_address(VALUE self, VALUE address)
47
+ static VALUE oh_addresses_to_references(VALUE self, VALUE addresses)
46
48
  {
47
- return FIX2PTR(address);
49
+ VALUE hash, obj_addr, references;
50
+ long i;
51
+
52
+ hash = rb_hash_new();
53
+
54
+ for (i = 0; i < RARRAY_LEN(addresses); i += 1) {
55
+ obj_addr = rb_ary_entry(addresses, i);
56
+
57
+ references = rb_ary_new();
58
+ rb_objspace_reachable_objects_from(oh_id2ref(self, obj_addr), reachable_object_i, (void*)references);
59
+
60
+ rb_hash_aset(hash, obj_addr, references);
61
+ }
62
+
63
+ return hash;
48
64
  }
49
65
 
50
66
  void Init_objspace_helpers(void)
@@ -55,6 +71,6 @@ void Init_objspace_helpers(void)
55
71
 
56
72
  rb_define_singleton_method(cObjspaceHelpers, "_dump_addresses", oh_dump_addresses, 0);
57
73
  rb_define_singleton_method(cObjspaceHelpers, "_addresses_to_info", oh_addresses_to_info, 1);
58
- rb_define_singleton_method(cObjspaceHelpers, "_address_of_obj", oh_address_of_obj, 1);
59
- rb_define_singleton_method(cObjspaceHelpers, "_obj_for_address", oh_obj_for_address, 1);
74
+ rb_define_singleton_method(cObjspaceHelpers, "_addresses_to_references", oh_addresses_to_references, 1);
75
+ rb_define_singleton_method(cObjspaceHelpers, "_id2ref", oh_id2ref, 1);
60
76
  }
@@ -4,7 +4,6 @@
4
4
  #include <ruby.h>
5
5
  #include <ruby_private/gc.h>
6
6
 
7
- #define PTR2FIX(v) INT2FIX((void *)v)
8
- #define FIX2PTR(v) ((VALUE)NUM2SIZET(v))
7
+ #include <id2ref.h>
9
8
 
10
9
  #endif
@@ -38,11 +38,11 @@ obj_type(VALUE obj)
38
38
  static void
39
39
  reachable_object_i(VALUE ref, void *data)
40
40
  {
41
- rb_ary_push((VALUE)data, PTR2FIX(ref));
41
+ rb_ary_push((VALUE)data, rb_obj_id(ref));
42
42
  }
43
43
 
44
44
  #define HASH_SET(k,v) rb_hash_aset(target_hash, rb_str_new2(k), v)
45
- #define HASH_SET_PTR(k,v) HASH_SET(k,INT2FIX((void *)v))
45
+ #define HASH_SET_PTR(k,v) HASH_SET(k,rb_obj_id(v))
46
46
  #define HASH_SET_INT(k,v) HASH_SET(k,INT2FIX(v))
47
47
  #define HASH_SET_UINT(k,v) HASH_SET(k,UINT2NUM(v))
48
48
  #define HASH_SET_ULONG(k,v) HASH_SET(k,ULONG2NUM(v))
@@ -150,7 +150,7 @@ objspace_info(VALUE obj, VALUE target_hash)
150
150
  }
151
151
 
152
152
  rb_objspace_reachable_objects_from(obj, reachable_object_i, (void*)references);
153
- rb_ary_delete(references, PTR2FIX(obj_klass));
153
+ rb_ary_delete(references, rb_obj_id(obj_klass));
154
154
  HASH_SET("references", references);
155
155
 
156
156
  if ((ainfo = objspace_lookup_allocation_info(obj))) {
@@ -8,21 +8,13 @@ class ObjspaceHelpers
8
8
  end
9
9
 
10
10
  def self.info_for_obj(obj)
11
- _addresses_to_info([address_of(obj)]).values.first
12
- end
13
-
14
- def self.obj_for(address)
15
- _obj_for_address(address)
16
- end
17
-
18
- def self.address_of(obj)
19
- _address_of_obj(obj)
11
+ _addresses_to_info([obj.object_id]).values.first
20
12
  end
21
13
 
22
14
  def self.diff(&block)
23
15
  objs_before = dump_all_addresses
24
16
  block.call
25
17
  objs_after = dump_all_addresses
26
- objs_after - objs_before - [address_of(objs_after)]
18
+ objs_after - objs_before - [objs_after.object_id]
27
19
  end
28
20
  end
@@ -1,3 +1,3 @@
1
1
  class ObjspaceHelpers
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.2'
3
3
  end
@@ -4,3 +4,5 @@ require 'objspace_helpers/version'
4
4
  require 'objspace_helpers/objspace_helpers'
5
5
 
6
6
  require 'objspace_helpers/helpers'
7
+ require 'objspace_helpers/leaks'
8
+ require 'objspace_helpers/tracked_object'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: objspace_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lukas Fittl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-24 00:00:00.000000000 Z
11
+ date: 2014-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -92,7 +92,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
92
  version: '0'
93
93
  requirements: []
94
94
  rubyforge_project:
95
- rubygems_version: 2.2.2
95
+ rubygems_version: 2.4.2
96
96
  signing_key:
97
97
  specification_version: 4
98
98
  summary: Helper library to work with ObjectSpace in MRI Ruby 2.1+