SIGCONT: don't terminate process

Change-Id: Ib959a9e5341fda37bd055724ecb9319a469b7420
Refs: #1410
This commit is contained in:
Tomoki Shirasawa
2019-11-14 11:35:01 +09:00
committed by Masamichi Takagi
parent adb6cce3ce
commit 4b252a990f
11 changed files with 1939 additions and 5 deletions

View File

@@ -1523,7 +1523,9 @@ check_sig_pending_thread(struct thread *thread)
sig++, x >>= 1)
;
k = thread->sigcommon->action + sig - 1;
if ((sig != SIGCHLD && sig != SIGURG) ||
if ((sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT) ||
(k->sa.sa_handler != SIG_IGN &&
k->sa.sa_handler != NULL)) {
if (!(pending->sigmask.__val[0] & w)) {
@@ -1532,6 +1534,7 @@ check_sig_pending_thread(struct thread *thread)
found = 1;
if (sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT &&
!k->sa.sa_handler) {
found = 2;
break;
@@ -1819,7 +1822,9 @@ done:
if ((sig != SIGKILL && (tthread->ptrace & PT_TRACED)) ||
(k->sa.sa_handler != SIG_IGN &&
(k->sa.sa_handler != NULL ||
(sig != SIGCHLD && sig != SIGURG)))) {
(sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT)))) {
struct sig_pending *pending = NULL;
if (sig < SIGRTMIN) { // SIGRTMIN - SIGRTMAX
list_for_each_entry(pending, head, list){

View File

@@ -1067,7 +1067,9 @@ getsigpending(struct thread *thread, int delflag){
for(x = pending->sigmask.__val[0], sig = 0; x; sig++, x >>= 1);
k = thread->sigcommon->action + sig - 1;
if(delflag ||
(sig != SIGCHLD && sig != SIGURG) ||
(sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT) ||
(k->sa.sa_handler != (void *)1 &&
k->sa.sa_handler != NULL)){
if(!(pending->sigmask.__val[0] & w)){
@@ -1214,7 +1216,9 @@ check_sig_pending_thread(struct thread *thread)
for (x = pending->sigmask.__val[0], sig = 0; x;
sig++, x >>= 1);
k = thread->sigcommon->action + sig - 1;
if ((sig != SIGCHLD && sig != SIGURG) ||
if ((sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT) ||
(k->sa.sa_handler != (void *)1 &&
k->sa.sa_handler != NULL)) {
if (!(pending->sigmask.__val[0] & w)) {
@@ -1223,6 +1227,7 @@ check_sig_pending_thread(struct thread *thread)
found = 1;
if (sig != SIGCHLD &&
sig != SIGURG &&
sig != SIGCONT &&
!k->sa.sa_handler) {
found = 2;
break;
@@ -1546,7 +1551,7 @@ done:
if ((sig != SIGKILL && (tthread->ptrace & PT_TRACED)) ||
(k->sa.sa_handler != (void *)1 &&
(k->sa.sa_handler != NULL ||
(sig != SIGCHLD && sig != SIGURG)))) {
(sig != SIGCHLD && sig != SIGURG && sig != SIGCONT)))) {
struct sig_pending *pending = NULL;
if (sig < 33) { // SIGRTMIN - SIGRTMAX
list_for_each_entry(pending, head, list){