diff options
author | Stefan Hajnoczi <stefanha@redhat.com> | 2014-03-13 10:41:34 +0100 |
---|---|---|
committer | Andreas Färber <afaerber@suse.de> | 2014-03-13 21:12:07 +0100 |
commit | cb201b4872f16dfbce63f8648b2584631e2e965f (patch) | |
tree | a91a720022a6b37ad8915c9b8a02eec796df8c02 /tests/libqtest.h | |
parent | f33f991185bccd22963c256437b9d8ea63361ff5 (diff) |
qtest: Fix crash if SIGABRT during qtest_init()
If an assertion fails during qtest_init() the SIGABRT handler is
invoked. This is the correct behavior since we need to kill the QEMU
process to avoid leaking it when the test dies.
The global_qtest pointer used by the SIGABRT handler is currently only
assigned after qtest_init() returns. This results in a segfault if an
assertion failure occurs during qtest_init().
Move global_qtest assignment inside qtest_init(). Not pretty but let's
face it - the signal handler depends on global state.
Reported-by: Marcel Apfelbaum <marcel.a@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Tested-by: Marcel Apfelbaum <marcel.a@redhat.com>
Signed-off-by: Andreas Färber <afaerber@suse.de>
Diffstat (limited to 'tests/libqtest.h')
-rw-r--r-- | tests/libqtest.h | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/tests/libqtest.h b/tests/libqtest.h index 8268c098bf..27a58fdb1c 100644 --- a/tests/libqtest.h +++ b/tests/libqtest.h @@ -335,8 +335,7 @@ void qtest_add_func(const char *str, void (*fn)); */ static inline QTestState *qtest_start(const char *args) { - global_qtest = qtest_init(args); - return global_qtest; + return qtest_init(args); } /** @@ -347,7 +346,6 @@ static inline QTestState *qtest_start(const char *args) static inline void qtest_end(void) { qtest_quit(global_qtest); - global_qtest = NULL; } /** |