[#63592] [ruby-trunk - Bug #10009] IO operation is 10x slower in multi-thread environment — normalperson@...
Issue #10009 has been updated by Eric Wong.
3 messages
2014/07/08
[#63682] [ruby-trunk - Feature #10030] [PATCH] reduce rb_iseq_struct to 296 bytes — ko1@...
Issue #10030 has been updated by Koichi Sasada.
3 messages
2014/07/13
[#63703] [ruby-trunk - Feature #10030] [PATCH] reduce rb_iseq_struct to 296 bytes — ko1@...
Issue #10030 has been updated by Koichi Sasada.
3 messages
2014/07/14
[#63743] [ruby-trunk - Bug #10037] Since r46798 on Solaris, "[BUG] rb_vm_get_cref: unreachable" during make — ngotogenome@...
Issue #10037 has been updated by Naohisa Goto.
3 messages
2014/07/15
[#64136] Ruby 2.1.2 (and 2.1.1 and probably others) assumes a libffi with 3 version numbers in extconf.rb — "Jeffrey 'jf' Lim" <jfs.world@...>
As per subject.
4 messages
2014/07/31
[#64138] Re: Ruby 2.1.2 (and 2.1.1 and probably others) assumes a libffi with 3 version numbers in extconf.rb
— "Jeffrey 'jf' Lim" <jfs.world@...>
2014/07/31
On Thu, Jul 31, 2014 at 6:03 PM, Jeffrey 'jf' Lim <[email protected]>
[ruby-core:64011] [ruby-trunk - Feature #10038] Extend ObjectSpace.dump to expose buffer addresses for String and Array
From:
tom.enebo@...
Date:
2014-07-25 18:13:16 UTC
List:
ruby-core #64011
Issue #10038 has been updated by Thomas Enebo.
ko1, when you say native tools, do you mean things like valgrind? Can you elaborate a bit (curious since I am doing some stuff with Java Heap dumps atm)?
I am neutral on this because it feels like an extension to help with your implementation and does not seem like 'Ruby'. I would like there to be some convention in MRI source perhaps (or even docs) indicating that something is an impl-specific method or API. I don't mind that each impl has extra useful stuff, but I would like a standard for indicating that it is impl-specific.
----------------------------------------
Feature #10038: Extend ObjectSpace.dump to expose buffer addresses for String and Array
https://bugs.ruby-lang.org/issues/10038#change-48026
* Author: Koichi Sasada
* Status: Open
* Priority: Normal
* Assignee: Aman Gupta
* Category: ext
* Target version: current: 2.2.0
----------------------------------------
ObjectSpace.dump() expose internal information in JSON.
How about to expose buffer addresses for String and Array?
```diff
Index: ext/objspace/objspace_dump.c
===================================================================
--- ext/objspace/objspace_dump.c (revision 46821)
+++ ext/objspace/objspace_dump.c (working copy)
@@ -178,12 +178,16 @@ dump_object(VALUE obj, struct dump_confi
dump_append(dc, ", \"broken\":true");
if (FL_TEST(obj, RSTRING_FSTR))
dump_append(dc, ", \"fstring\":true");
- if (STR_SHARED_P(obj))
+
+ if (STR_SHARED_P(obj)) {
dump_append(dc, ", \"shared\":true");
+ }
else {
dump_append(dc, ", \"bytesize\":%ld", RSTRING_LEN(obj));
- if (!STR_EMBED_P(obj) && !STR_SHARED_P(obj) && (long)rb_str_capacity(obj) != RSTRING_LEN(obj))
+ if (!STR_EMBED_P(obj) && !STR_SHARED_P(obj) && (long)rb_str_capacity(obj) != RSTRING_LEN(obj)) {
dump_append(dc, ", \"capacity\":%ld", rb_str_capacity(obj));
+ dump_append(dc, ", \"ptr\":\"%p\"", RSTRING_PTR(obj));
+ }
if (is_ascii_string(obj)) {
dump_append(dc, ", \"value\":");
@@ -205,8 +209,14 @@ dump_object(VALUE obj, struct dump_confi
dump_append(dc, ", \"length\":%ld", RARRAY_LEN(obj));
if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, ELTS_SHARED))
dump_append(dc, ", \"shared\":true");
- if (RARRAY_LEN(obj) > 0 && FL_TEST(obj, RARRAY_EMBED_FLAG))
+ if (RARRAY_LEN(obj) > 0) {
+ if (FL_TEST(obj, RARRAY_EMBED_FLAG)) {
dump_append(dc, ", \"embedded\":true");
+ }
+ else {
+ dump_append(dc, ", \"ptr\":\"%p\"", RARRAY_PTR(obj));
+ }
+ }
break;
case T_CLASS:
```
With this hack, we can know the real memory address of them and cooperate with other native tools.
BTW, ObjectSpace.dump() should support T_SYMBOL.
--
https://bugs.ruby-lang.org/