Author: bonefish Date: 2011-05-23 13:37:48 +0200 (Mon, 23 May 2011) New Revision: 41675 Changeset: https://dev.haiku-os.org/changeset/41675 Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/signal.cpp haiku/branches/developer/bonefish/signals/src/system/kernel/thread.cpp Log: thread_exit(), handle_signals(): Add the required information to the SIGCHLD signal we send to the parent. Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/signal.cpp =================================================================== --- haiku/branches/developer/bonefish/signals/src/system/kernel/signal.cpp 2011-05-23 11:34:52 UTC (rev 41674) +++ haiku/branches/developer/bonefish/signals/src/system/kernel/signal.cpp 2011-05-23 11:37:48 UTC (rev 41675) @@ -1004,6 +1004,8 @@ if ((parentHandler.sa_flags & SA_NOCLDSTOP) == 0) { Signal childSignal(SIGCHLD, CLD_STOPPED, B_OK, team->id); + childSignal.SetStatus(signal->Number()); + childSignal.SetSendingUser(signal->SendingUser()); send_signal_to_team_locked(parentTeam, childSignal, 0); } Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/thread.cpp =================================================================== --- haiku/branches/developer/bonefish/signals/src/system/kernel/thread.cpp 2011-05-23 11:34:52 UTC (rev 41674) +++ haiku/branches/developer/bonefish/signals/src/system/kernel/thread.cpp 2011-05-23 11:37:48 UTC (rev 41675) @@ -1624,8 +1624,13 @@ // Send SIGCHLD to the parent as long as we still have its lock. // This makes job control state change + signalling atomic. - Signal childSignal(SIGCHLD, CLD_EXITED, B_OK, team->id); - // TODO: Correct signal code! + Signal childSignal(SIGCHLD, team->exit.reason, B_OK, team->id); + if (team->exit.reason == CLD_EXITED) { + childSignal.SetStatus(team->exit.status); + } else { + childSignal.SetStatus(team->exit.signal); + childSignal.SetSendingUser(team->exit.signaling_user); + } send_signal_to_team_locked(parent, childSignal, B_DO_NOT_RESCHEDULE);