vm: hand SIGALRM to signal pipe if not sampling
parent
97a048fdc1
commit
2e9552d98a
|
@ -212,12 +212,16 @@ void fep_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
void sample_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
void sample_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
{
|
{
|
||||||
factor_vm *vm = current_vm_p();
|
factor_vm *vm = current_vm_p();
|
||||||
if (vm)
|
bool foreign_thread = false;
|
||||||
vm->safepoint.enqueue_samples(vm, 1, (cell)UAP_PROGRAM_COUNTER(uap), false);
|
if (vm == NULL)
|
||||||
else if (thread_vms.size() == 1) {
|
{
|
||||||
factor_vm *the_only_vm = thread_vms.begin()->second;
|
foreign_thread = true;
|
||||||
the_only_vm->safepoint.enqueue_samples(the_only_vm, 1, (cell)UAP_PROGRAM_COUNTER(uap), true);
|
vm = thread_vms.begin()->second;
|
||||||
}
|
}
|
||||||
|
if (atomic::load(&vm->sampling_profiler_p))
|
||||||
|
vm->safepoint.enqueue_samples(vm, 1, (cell)UAP_PROGRAM_COUNTER(uap), foreign_thread);
|
||||||
|
else if (!foreign_thread)
|
||||||
|
enqueue_signal(vm, signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ignore_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
void ignore_signal_handler(int signal, siginfo_t *siginfo, void *uap)
|
||||||
|
|
Loading…
Reference in New Issue