objspace_helpers 0.0.1 → 0.0.2
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 +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+
|