summaryrefslogtreecommitdiff
path: root/exec.c
diff options
context:
space:
mode:
authorRiku Voipio <riku.voipio@nokia.com>2010-01-25 14:30:49 +0200
committerAurelien Jarno <aurelien@aurel32.net>2010-02-06 17:19:43 +0100
commitfd052bf63a2ee8e8aff9bb9a51ce7c5f744561f4 (patch)
tree9107abec60f02e66ade807fa75620667dc3c49dd /exec.c
parentcab1b4bdc7d42759e0487e73cc19946e77c82a3a (diff)
downloadqemu-fd052bf63a2ee8e8aff9bb9a51ce7c5f744561f4.tar.gz
linux-user: remove signal handler before calling abort()
Qemu may hang in host_signal_handler after qemu has done a seppuku with cpu_abort(). But at this stage we are not really interested in target process coredump anymore, so unregister host_signal_handler to die grafefully. Signed-off-by: Riku Voipio <riku.voipio@nokia.com>
Diffstat (limited to 'exec.c')
-rw-r--r--exec.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/exec.c b/exec.c
index 461bbffa68..b0caf7c24f 100644
--- a/exec.c
+++ b/exec.c
@@ -40,6 +40,7 @@
#include "kvm.h"
#if defined(CONFIG_USER_ONLY)
#include <qemu.h>
+#include <signal.h>
#endif
//#define DEBUG_TB_INVALIDATE
@@ -1692,6 +1693,14 @@ void cpu_abort(CPUState *env, const char *fmt, ...)
}
va_end(ap2);
va_end(ap);
+#if defined(CONFIG_USER_ONLY)
+ {
+ struct sigaction act;
+ sigfillset(&act.sa_mask);
+ act.sa_handler = SIG_DFL;
+ sigaction(SIGABRT, &act, NULL);
+ }
+#endif
abort();
}