diff options
author | Ralf Habacker <ralf.habacker@freenet.de> | 2015-11-09 20:38:03 +0100 |
---|---|---|
committer | Ralf Habacker <ralf.habacker@freenet.de> | 2015-11-11 12:20:07 +0100 |
commit | dcdb29a1051810ac125b7e281e7688687df0ed70 (patch) | |
tree | 3614c6461306d638b7ba4f4e7b167d62b46ebc47 | |
parent | e2e31794924a15bfaeadf2867ea3dd174db2d31f (diff) | |
download | dbus-dcdb29a1051810ac125b7e281e7688687df0ed70.tar.gz |
Fix test-bus segfault_service_no_auto_start test on windows.
Windows returns unhandled exceptions from a running child
by specific exit codes and not by signals as on UNIX.
Therefore we use DBUS_ERROR_SPAWN_CHILD_EXITED for propagating
unhandled exceptions to the parent too.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=92721
Reviewed-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
-rw-r--r-- | bus/dispatch.c | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/bus/dispatch.c b/bus/dispatch.c index 4d9ffa3f..c413f100 100644 --- a/bus/dispatch.c +++ b/bus/dispatch.c @@ -2926,7 +2926,6 @@ check_existent_service_no_auto_start (BusContext *context, return retval; } -#ifndef DBUS_WIN_FIXME /* returns TRUE if the correct thing happens, * but the correct thing may include OOM errors. */ @@ -3015,11 +3014,19 @@ check_segfault_service_no_auto_start (BusContext *context, /* make sure this only happens with the launch helper */ _dbus_assert (servicehelper != NULL); } +#ifdef DBUS_WIN + else if (dbus_message_is_error (message, + DBUS_ERROR_SPAWN_CHILD_EXITED)) + { + /* unhandled exceptions are normal exit codes */ + } +#else else if (dbus_message_is_error (message, DBUS_ERROR_SPAWN_CHILD_SIGNALED)) { ; /* good, this is expected also */ } +#endif else { warn_unexpected (connection, message, "not this error"); @@ -3108,11 +3115,19 @@ check_segfault_service_auto_start (BusContext *context, { ; /* good, this is a valid response */ } +#ifdef DBUS_WIN + else if (dbus_message_is_error (message, + DBUS_ERROR_SPAWN_CHILD_EXITED)) + { + /* unhandled exceptions are normal exit codes */ + } +#else else if (dbus_message_is_error (message, DBUS_ERROR_SPAWN_CHILD_SIGNALED)) { ; /* good, this is expected also */ } +#endif else { warn_unexpected (connection, message, "not this error"); @@ -3134,7 +3149,6 @@ check_segfault_service_auto_start (BusContext *context, return retval; } -#endif #define TEST_ECHO_MESSAGE "Test echo message" #define TEST_RUN_HELLO_FROM_SELF_MESSAGE "Test sending message to self" @@ -4849,12 +4863,8 @@ bus_dispatch_test_conf (const DBusString *test_data_dir, check2_try_iterations (context, foo, "nonexistent_service_no_auto_start", check_nonexistent_service_no_auto_start); -#ifdef DBUS_WIN_FIXME - _dbus_warn("TODO: dispatch.c segfault_service_no_auto_start test\n"); -#else check2_try_iterations (context, foo, "segfault_service_no_auto_start", check_segfault_service_no_auto_start); -#endif check2_try_iterations (context, foo, "existent_service_no_auto_start", check_existent_service_no_auto_start); @@ -4862,14 +4872,9 @@ bus_dispatch_test_conf (const DBusString *test_data_dir, check2_try_iterations (context, foo, "nonexistent_service_auto_start", check_nonexistent_service_auto_start); - -#ifdef DBUS_WIN_FIXME - _dbus_warn("TODO: dispatch.c segfault_service_auto_start test\n"); -#else /* only do the segfault test if we are not using the launcher */ check2_try_iterations (context, foo, "segfault_service_auto_start", check_segfault_service_auto_start); -#endif /* only do the shell fail test if we are not using the launcher */ check2_try_iterations (context, foo, "shell_fail_service_auto_start", |