Bug #17020

ObjectSpace.trace_object_allocations_stop raises if called before trace_object_allocations_start

Added by byroot (Jean Boussier) 7 months ago. Updated 5 months ago.

Target version:
ruby -v:
ruby 2.5.8p224 (2020-03-31 revision 67882) [x86_64-darwin19]


The error is easy to reproduce:

e.g. on Ruby 2.3:

$ ruby -robjspace -e 'ObjectSpace.trace_object_allocations_stop'
-e:1:in `trace_object_allocations_stop': wrong argument type false (expected tracepoint) (TypeError)
    from -e:1:in `<main>'

Up to ruby 2.7.1:

$ ruby -robjspace -e 'ObjectSpace.trace_object_allocations_stop'
Traceback (most recent call last):
    1: from -e:1:in `<main>'
-e:1:in `trace_object_allocations_stop': wrong argument type false (expected tracepoint) (TypeError)


Updated by nobu (Nobuyoshi Nakada) 7 months ago

  • Assignee set to byroot (Jean Boussier)

A possible alternative might be an exception, I thought first, but it isn’t a single condition.
Could you add the test?

Updated by byroot (Jean Boussier) 7 months ago

As explained in the PR, I have no idea how to write a regression test, because as long as ObjectSpace.trace_object_allocations_start was called at least once in the program, it no longer fails afterwards. That is what led me to think it's a bug.

I can write test that calls trace_object_allocations_stop but based on test ordering it might never fail on CI.

Updated by byroot (Jean Boussier) 6 months ago

I added a regression test using assert_separately.

Updated by byroot (Jean Boussier) 5 months ago

I can't close, but this is fixed in a74df67244199d1fd1f7a20b49dd5a096d2a13a2

Updated by tenderlovemaking (Aaron Patterson) 5 months ago

  • Status changed from Open to Closed

I merged. Thanks for the patch

Also available in: Atom PDF