* Moved SIGABRT to the signals that kill the process. Not sure if it's a good

idea to always send SIGKILL to the main thread, though. I'm not really getting
  more insight by reading the POSIX specs.
* Anyway, in the mean time, this fixes bug #4784.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33599 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2009-10-15 11:53:19 +00:00
parent f1488adbf7
commit 358b93352e

View File

@ -1,12 +1,14 @@
/*
* Copyright 2002-2008, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de.
* Copyright 2002, Angelo Mottola, a.mottola@libero.it.
*
* Distributed under the terms of the MIT License.
*/
/*! POSIX signals handling routines */
#include <ksignal.h>
#include <stddef.h>
@ -391,6 +393,7 @@ handle_signals(struct thread *thread)
case SIGFPE:
case SIGILL:
case SIGTRAP:
case SIGABRT:
// If this is the main thread, we just fall through and let
// this signal kill the team. Otherwise we send a SIGKILL to
// the main thread first, since the signal will kill this
@ -398,7 +401,6 @@ handle_signals(struct thread *thread)
if (thread != thread->team->main_thread)
send_signal(thread->team->main_thread->id, SIGKILL);
case SIGQUIT:
case SIGABRT:
case SIGPOLL:
case SIGPROF:
case SIGSYS:
@ -488,7 +490,7 @@ is_signal_blocked(int signal)
thread lock held.
*/
static status_t
deliver_signal(struct thread *thread, uint signal, uint32 flags,
deliver_signal(struct thread *thread, uint signal, uint32 flags,
bool &reschedule)
{
if (flags & B_CHECK_PERMISSION) {