|
@@ -1694,10 +1694,13 @@ static void ptrace_stop(int exit_code, int why, int clear_code, siginfo_t *info)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * If there is a group stop in progress,
|
|
|
- * we must participate in the bookkeeping.
|
|
|
+ * If @why is CLD_STOPPED, we're trapping to participate in a group
|
|
|
+ * stop. Do the bookkeeping. Note that if SIGCONT was delievered
|
|
|
+ * while siglock was released for the arch hook, PENDING could be
|
|
|
+ * clear now. We act as if SIGCONT is received after TASK_TRACED
|
|
|
+ * is entered - ignore it.
|
|
|
*/
|
|
|
- if (current->group_stop & GROUP_STOP_PENDING)
|
|
|
+ if (why == CLD_STOPPED && (current->group_stop & GROUP_STOP_PENDING))
|
|
|
task_participate_group_stop(current);
|
|
|
|
|
|
current->last_siginfo = info;
|