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 +4 -4
- data/ext/objspace_helpers/extconf.rb +1 -1
- data/ext/objspace_helpers/objspace_helpers.c +24 -8
- data/ext/objspace_helpers/objspace_helpers.h +1 -2
- data/ext/objspace_helpers/objspace_info.c +3 -3
- data/lib/objspace_helpers/helpers.rb +2 -10
- data/lib/objspace_helpers/version.rb +1 -1
- data/lib/objspace_helpers.rb +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d0175d9d52d2d5fdc414e9b5e9cda0475dcf33bd
|
4
|
+
data.tar.gz: 5c92f3b27147ecef0e63a55332a3c72262d78f68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4a31190183b4d4d8b1d348720dd4a974c3fed2410184dcaeac3ffdef6263785cde179398581cb60b2b518e723470a82cf5926193270c5cdbd25363bcbd893c60
|
7
|
+
data.tar.gz: ec1a6ff89ac9d196d12eb791ab8abf0f70b993e7d5b552b6f51691a25b663e63999173d0930daa2b6a2f12ce622f542186670fb2b9cc6fe3ed80093945acd9bf
|
@@ -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,
|
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(
|
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
|
41
|
+
static void
|
42
|
+
reachable_object_i(VALUE ref, void *data)
|
41
43
|
{
|
42
|
-
|
44
|
+
rb_ary_push((VALUE)data, rb_obj_id(ref));
|
43
45
|
}
|
44
46
|
|
45
|
-
static VALUE
|
47
|
+
static VALUE oh_addresses_to_references(VALUE self, VALUE addresses)
|
46
48
|
{
|
47
|
-
|
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, "
|
59
|
-
rb_define_singleton_method(cObjspaceHelpers, "
|
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
|
}
|
@@ -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,
|
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,
|
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,
|
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([
|
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 - [
|
18
|
+
objs_after - objs_before - [objs_after.object_id]
|
27
19
|
end
|
28
20
|
end
|
data/lib/objspace_helpers.rb
CHANGED
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.
|
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
|
+
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.
|
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+
|