Project

General

Profile

Actions

Feature #15939

open

Dump symbols reference to their fstr in ObjectSpace.dump()

Added by byroot (Jean Boussier) over 5 years ago. Updated over 5 years ago.

Status:
Assigned
Target version:
-
[ruby-core:93246]

Description

Patch: https://github.com/ruby/ruby/pull/2240

Symbols wether they are dynamic or static do hold a reference onto their respective fstring, so it's important to dump these references so that it's possible to see that a String isn't garbage collected because it has an associated Symbol.

Dumping a static Symbol (before):

>> puts ObjectSpace.dump(:foobar)
{"type":"SYMBOL", "value":"foobar"}

after:

>> puts ObjectSpace.dump(:foobar)
{"address":"0x7a210c", "type":"SYMBOL", "value":"foobar", "references":["0x7f8dd482c7d8"], "dynamic": false}

Dumping a dynamic Symbol (before):

>> puts ObjectSpace.dump("foobar".to_sym)
{"address":"0x7fcdf7042eb0", "type":"SYMBOL", "class":"0x7fcdf70c8628", "frozen":true, "bytesize":6, "value":"foobar", "memsize":40, "flags":{"wb_protected":true}}

After:

>> puts ObjectSpace.dump("foobar".to_sym)
{"address":"0x7fcdf7042eb0", "type":"SYMBOL", "class":"0x7fcdf70c8628", "frozen":true, "bytesize":6, "value":"foobar", "dynamic":true, "references":["0x7fcdf7042ed8"], "memsize":40, "flags":{"wb_protected":true}}

Limitations:

ObjectSpace.dump_all rely on rb_objspace_reachable_objects_from to list an object's references.
Because of this static symbol "references" are not followed, and as such are invisible in ObjectSpace.dump_all.

I'd like to correct it but it's quite more complicated because rb_objspace_reachable_objects_from is used by the GC, so I'd need to duplicate that function for objspace_dump usage.

So I wouldn't mind some opinion on that before attempting it.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0