diff options
-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 |