SIGCHLD also needs to be sent when a child is stopped. The shell now
properly realized when a job has been stopped. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22093 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
d348ab947f
commit
e8b3ee8155
@ -51,6 +51,10 @@ const char * const sigstr[NSIG] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static status_t deliver_signal(struct thread *thread, uint signal,
|
||||||
|
uint32 flags);
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
notify_debugger(struct thread *thread, int signal, struct sigaction *handler,
|
notify_debugger(struct thread *thread, int signal, struct sigaction *handler,
|
||||||
bool deadly)
|
bool deadly)
|
||||||
@ -72,10 +76,9 @@ notify_debugger(struct thread *thread, int signal, struct sigaction *handler,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Actually handles the signal - ie. the thread will exit, a custom signal
|
/*! Actually handles the signal - ie. the thread will exit, a custom signal
|
||||||
* handler is prepared, or whatever the signal demands.
|
handler is prepared, or whatever the signal demands.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool
|
bool
|
||||||
handle_signals(struct thread *thread)
|
handle_signals(struct thread *thread)
|
||||||
{
|
{
|
||||||
@ -172,6 +175,11 @@ handle_signals(struct thread *thread)
|
|||||||
InterruptsSpinLocker locker(team_spinlock);
|
InterruptsSpinLocker locker(team_spinlock);
|
||||||
team_set_job_control_state(thread->team,
|
team_set_job_control_state(thread->team,
|
||||||
JOB_CONTROL_STATE_STOPPED, signal, false);
|
JOB_CONTROL_STATE_STOPPED, signal, false);
|
||||||
|
|
||||||
|
// send a SIGCHLD to the parent
|
||||||
|
SpinLocker _(thread_spinlock);
|
||||||
|
deliver_signal(thread->team->parent->main_thread,
|
||||||
|
SIGCHLD, 0);
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user