diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-08 00:18:42 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-12-08 00:18:42 +0000 |
commit | 1c5b309211c8d41b2624766fdeb60cc5fa3faf94 (patch) | |
tree | 40e8d070a7035985a6e5642ff2fd3d3df5ae4eea | |
parent | 5b1065f3fee2a3cb0095a28a5bedaa3f74f09a5b (diff) | |
download | ruby-1c5b309211c8d41b2624766fdeb60cc5fa3faf94.tar.gz |
* ext/objspace/objspace.c (iow_size): return size of internal object
for ObjectSpace.memsize_of().
* test/objspace/test_objspace.rb: add a test.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@38266 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/objspace/objspace.c | 9 | ||||
-rw-r--r-- | test/objspace/test_objspace.rb | 10 |
3 files changed, 25 insertions, 1 deletions
@@ -1,3 +1,10 @@ +Sat Dec 8 07:57:12 2012 Koichi Sasada <ko1@atdot.net> + + * ext/objspace/objspace.c (iow_size): return size of internal object + for ObjectSpace.memsize_of(). + + * test/objspace/test_objspace.rb: add a test. + Tue Dec 08 02:39:23 2012 James Edward Gray II <james@graysoftinc.com> * lib/csv.rb: A fix for row comparison by Stephen Wattam. [Bug #7528] diff --git a/ext/objspace/objspace.c b/ext/objspace/objspace.c index 1889f11382..5d585d69a1 100644 --- a/ext/objspace/objspace.c +++ b/ext/objspace/objspace.c @@ -639,9 +639,16 @@ iow_mark(void *ptr) rb_gc_mark((VALUE)ptr); } +static size_t +iow_size(const void *ptr) +{ + VALUE obj = (VALUE)ptr; + return memsize_of(obj); +} + static const rb_data_type_t iow_data_type = { "ObjectSpace::InternalObjectWrapper", - {iow_mark, 0, 0,}, + {iow_mark, 0, iow_size,}, }; static VALUE rb_mInternalObjectWrapper; diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb index 723e6e431e..eeb8ffa664 100644 --- a/test/objspace/test_objspace.rb +++ b/test/objspace/test_objspace.rb @@ -92,4 +92,14 @@ class TestObjSpace < Test::Unit::TestCase } assert_operator(max, :>=, 1_001, "1000 elems + Array class") end + + def test_reachable_objects_size + ObjectSpace.each_object{|o| + ObjectSpace.reachable_objects_from(o).each{|reached_obj| + size = ObjectSpace.memsize_of(reached_obj) + assert_kind_of(Integer, size) + assert_operator(size, :>=, 0) + } + } + end end |