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:
Ingo Weinhold 2007-08-28 14:24:34 +00:00
parent d348ab947f
commit e8b3ee8155

View File

@ -51,6 +51,10 @@ const char * const sigstr[NSIG] = {
};
static status_t deliver_signal(struct thread *thread, uint signal,
uint32 flags);
static bool
notify_debugger(struct thread *thread, int signal, struct sigaction *handler,
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
* handler is prepared, or whatever the signal demands.
/*! Actually handles the signal - ie. the thread will exit, a custom signal
handler is prepared, or whatever the signal demands.
*/
bool
handle_signals(struct thread *thread)
{
@ -172,6 +175,11 @@ handle_signals(struct thread *thread)
InterruptsSpinLocker locker(team_spinlock);
team_set_job_control_state(thread->team,
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;