* event, hence the collect_bt/emit_bt split.
*/
static void
-collect_bt (FrameData *data)
+collect_bt (FrameData *data, gboolean async_safe)
{
data->count = 0;
- mono_stack_walk_no_il (walk_stack, data);
+ if (async_safe)
+ mono_stack_walk_async_safe (walk_stack, data);
+ else
+ mono_stack_walk_no_il (walk_stack, data);
}
static void
len += 7;
len &= ~7;
if (do_bt)
- collect_bt (&data);
+ collect_bt (&data, FALSE);
logbuffer = ensure_logbuf (32 + MAX_FRAMES * 8);
now = current_time ();
ENTER_LOG (logbuffer, "gcalloc");
FrameData data;
LogBuffer *logbuffer;
if (do_bt)
- collect_bt (&data);
+ collect_bt (&data, FALSE);
logbuffer = ensure_logbuf (16 + MAX_FRAMES * 8);
now = current_time ();
ENTER_LOG (logbuffer, "throw");
FrameData data;
LogBuffer *logbuffer;
if (do_bt)
- collect_bt (&data);
+ collect_bt (&data, FALSE);
logbuffer = ensure_logbuf (16 + MAX_FRAMES * 8);
now = current_time ();
ENTER_LOG (logbuffer, "monitor");
if (in_shutdown)
return;
now = current_time ();
- collect_bt (&bt_data);
+ collect_bt (&bt_data, TRUE);
elapsed = (now - profiler->startup_time) / 10000;
if (do_debug) {
int len;