Make rb_profile_frames return 0 for NULL ec
When using M:N threads, EC is set to NULL in the shared native thread when nothing is scheduled. This previously caused a segfault when we try to examine the EC. Returning 0 instead means we may miss profiling information, but a profiler relying on this isn't thread aware anyways, and observing that "nothing" is running is probably correct. Fixes [Bug #20017] Co-authored-by: Dustin Brown <dbrown9@gmail.com>
This commit is contained in:
parent
78b27ce62a
commit
ffa5f16273
@ -1641,7 +1641,14 @@ thread_profile_frames(rb_execution_context_t *ec, int start, int limit, VALUE *b
|
|||||||
int
|
int
|
||||||
rb_profile_frames(int start, int limit, VALUE *buff, int *lines)
|
rb_profile_frames(int start, int limit, VALUE *buff, int *lines)
|
||||||
{
|
{
|
||||||
rb_execution_context_t *ec = GET_EC();
|
rb_execution_context_t *ec = rb_current_execution_context(false);
|
||||||
|
|
||||||
|
// If there is no EC, we may be attempting to profile a non-Ruby thread or a
|
||||||
|
// M:N shared native thread which has no active Ruby thread.
|
||||||
|
if (!ec) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
return thread_profile_frames(ec, start, limit, buff, lines);
|
return thread_profile_frames(ec, start, limit, buff, lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user