summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRalf Habacker <ralf.habacker@freenet.de>2015-11-09 20:38:03 +0100
committerRalf Habacker <ralf.habacker@freenet.de>2015-11-11 12:20:07 +0100
commitdcdb29a1051810ac125b7e281e7688687df0ed70 (patch)
tree3614c6461306d638b7ba4f4e7b167d62b46ebc47
parente2e31794924a15bfaeadf2867ea3dd174db2d31f (diff)
downloaddbus-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.c27
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",