summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-08 00:18:42 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-12-08 00:18:42 +0000
commit1c5b309211c8d41b2624766fdeb60cc5fa3faf94 (patch)
tree40e8d070a7035985a6e5642ff2fd3d3df5ae4eea
parent5b1065f3fee2a3cb0095a28a5bedaa3f74f09a5b (diff)
* 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--ChangeLog7
-rw-r--r--ext/objspace/objspace.c9
-rw-r--r--test/objspace/test_objspace.rb10
3 files changed, 25 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 7eefd82..becfc37 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 1889f11..5d585d6 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 723e6e4..eeb8ffa 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