Skip to content
  • Ivo Anjo's avatar
    649bfbe0
    Fix `rb_profile_frames` output includes dummy main thread frame · 649bfbe0
    Ivo Anjo authored
    The `rb_profile_frames` API did not skip the two dummy frames that
    each thread has at its beginning. This was unlike `backtrace_each` and
    `rb_ec_parcial_backtrace_object`, which do skip them.
    
    This does not seem to be a problem for non-main thread frames,
    because both `VM_FRAME_RUBYFRAME_P(cfp)` and
    `rb_vm_frame_method_entry(cfp)` are NULL for them.
    
    BUT, on the main thread `VM_FRAME_RUBYFRAME_P(cfp)` was true
    and thus the dummy thread was still included in the output of
    `rb_profile_frames`.
    
    I've now made `rb_profile_frames` skip this extra frame (like
    `backtrace_each` and friends), as well as add a test that asserts
    the size and contents of `rb_profile_frames`.
    
    Fixes [Bug #18907] (<https://bugs.ruby-lang.org/issues/18907>)
    649bfbe0
    Fix `rb_profile_frames` output includes dummy main thread frame
    Ivo Anjo authored
    The `rb_profile_frames` API did not skip the two dummy frames that
    each thread has at its beginning. This was unlike `backtrace_each` and
    `rb_ec_parcial_backtrace_object`, which do skip them.
    
    This does not seem to be a problem for non-main thread frames,
    because both `VM_FRAME_RUBYFRAME_P(cfp)` and
    `rb_vm_frame_method_entry(cfp)` are NULL for them.
    
    BUT, on the main thread `VM_FRAME_RUBYFRAME_P(cfp)` was true
    and thus the dummy thread was still included in the output of
    `rb_profile_frames`.
    
    I've now made `rb_profile_frames` skip this extra frame (like
    `backtrace_each` and friends), as well as add a test that asserts
    the size and contents of `rb_profile_frames`.
    
    Fixes [Bug #18907] (<https://bugs.ruby-lang.org/issues/18907>)
Loading