6 void safepoint_state::enqueue_safepoint() volatile
8 parent->code->guard_safepoint();
11 void safepoint_state::enqueue_fep(cell signal) volatile
14 fatal_error("Low-level debugger interrupted", 0);
15 atomic::store(&fep_p, true);
17 atomic::store(&queued_signal, signal);
21 void safepoint_state::enqueue_signal(cell signal) volatile
23 atomic::store(&queued_signal, signal);
27 void safepoint_state::enqueue_samples(cell samples, cell pc, bool foreign_thread_p) volatile
29 if (atomic::load(&parent->sampling_profiler_p))
31 atomic::add(&sample_counts.sample_count, samples);
33 atomic::add(&sample_counts.foreign_thread_sample_count, samples);
35 if (atomic::load(&parent->current_gc_p))
36 atomic::fetch_add(&sample_counts.gc_sample_count, samples);
37 if (atomic::load(&parent->current_jit_count) > 0)
38 atomic::fetch_add(&sample_counts.jit_sample_count, samples);
39 if (!parent->code->seg->in_segment_p(pc))
40 atomic::fetch_add(&sample_counts.foreign_sample_count, samples);
46 void safepoint_state::handle_safepoint() volatile
48 parent->code->unguard_safepoint();
50 report_signal(parent->signal_pipe_input);
52 if (atomic::load(&fep_p))
54 if (atomic::load(&parent->sampling_profiler_p))
55 parent->end_sampling_profiler();
56 std::cout << "Interrupted\n";
58 atomic::store(&fep_p, false);
60 else if (atomic::load(&parent->sampling_profiler_p))
61 parent->record_sample();