You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
TL; DR: Deliver SIGRTMIN+1 instead of SIGRTMIN to induce migration when using signal triggering.
When the migration library is compiled with type=signal_trigger, delivering SIGRTMIN to a migrateable process should cause a migration proposal. However, the process instead terminates -- the default action for SIGRTMIN.
On investigation, this stems from a discrepancy between the specified signal -- SIGRTMIN according to lib/migration/include/config.h -- and the actual signal that we set:
[anthony@fox4 11:28 NPB-make-popcorn-quiet-signal]$ gdb ./EP_B
...
(gdb) break sigaction
Breakpoint 1 at 0x51bf28: file src/signal/sigaction.c, line 55.
(gdb) run
Starting program: /home/anthony/NPB-make-popcorn-quiet-signal/EP_B
Breakpoint 1, __sigaction (sig=35, sa=0xfffffffff038, old=0x0) at src/signal/sigaction.c:55
55 src/signal/sigaction.c: No such file or directory.
On the second-to-last-line, we see sig=35 -- this is (on my machines at least) SIGRTMIN+1. The reason likely stems from how glibc implements POSIX threads. From man 7 signal:
The Linux kernel supports a range of 33 different real-time signals, numbered 32 to 64. However, the glibc POSIX threads implementation internally uses two (for NPTL) or three (for LinuxThreads) real-time signals (see pthreads(7)), and adjusts the value of SIGRTMIN suitably (to 34 or 35).
The simple solution then is to deliver SIGRTMIN+1 instead of SIGRTMIN.
The text was updated successfully, but these errors were encountered:
TL; DR: Deliver
SIGRTMIN+1
instead ofSIGRTMIN
to induce migration when using signal triggering.When the migration library is compiled with
type=signal_trigger
, deliveringSIGRTMIN
to a migrateable process should cause a migration proposal. However, the process instead terminates -- the default action forSIGRTMIN
.On investigation, this stems from a discrepancy between the specified signal --
SIGRTMIN
according tolib/migration/include/config.h
-- and the actual signal that we set:On the second-to-last-line, we see
sig=35
-- this is (on my machines at least)SIGRTMIN+1
. The reason likely stems from how glibc implements POSIX threads. Fromman 7 signal
:The simple solution then is to deliver
SIGRTMIN+1
instead ofSIGRTMIN
.The text was updated successfully, but these errors were encountered: