X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-spawn.c;h=f8d5fd1c7c6a3bcdabd54beb4f746f0419c58c1b;hb=a0be921da79a78e2c0484d99aac9002a1de1d0cf;hp=a4652a3e4aa8506cd07f424adae1fefe17a4330c;hpb=e9197996fec987f672f46cccfd1cfad0d088aa57;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-spawn.c b/dbus/dbus-spawn.c index a4652a3..f8d5fd1 100644 --- a/dbus/dbus-spawn.c +++ b/dbus/dbus-spawn.c @@ -936,7 +936,7 @@ do_exec (int child_err_report_fd, DBusSpawnChildSetupFunc child_setup, void *user_data) { -#ifdef DBUS_BUILD_TESTS +#ifdef DBUS_ENABLE_EMBEDDED_TESTS int i, max_open; #endif @@ -947,7 +947,7 @@ do_exec (int child_err_report_fd, if (child_setup) (* child_setup) (user_data); -#ifdef DBUS_BUILD_TESTS +#ifdef DBUS_ENABLE_EMBEDDED_TESTS max_open = sysconf (_SC_OPEN_MAX); for (i = 3; i < max_open; i++) @@ -1103,7 +1103,9 @@ babysit (pid_t grandchild_pid, { char b; if (read (sigchld_pipe[READ_END], &b, 1) == -1) - /* ignore */; + { + /* ignore */ + } /* do waitpid check */ check_babysit_events (grandchild_pid, parent_pipe, 0); } @@ -1254,7 +1256,11 @@ _dbus_spawn_async_with_babysitter (DBusBabysitter **sitter_p, _dbus_assert_not_reached ("Got to code after write_err_and_exit()"); } else if (grandchild_pid == 0) - { + { + /* Go back to ignoring SIGPIPE, since it's evil + */ + signal (SIGPIPE, SIG_IGN); + do_exec (child_err_report_pipe[WRITE_END], argv, env, @@ -1319,7 +1325,31 @@ _dbus_babysitter_set_result_function (DBusBabysitter *sitter, /** @} */ -#ifdef DBUS_BUILD_TESTS +#ifdef DBUS_ENABLE_EMBEDDED_TESTS + +static char * +get_test_exec (const char *exe, + DBusString *scratch_space) +{ + const char *dbus_test_exec; + + dbus_test_exec = _dbus_getenv ("DBUS_TEST_EXEC"); + + if (dbus_test_exec == NULL) + dbus_test_exec = DBUS_TEST_EXEC; + + if (!_dbus_string_init (scratch_space)) + return NULL; + + if (!_dbus_string_append_printf (scratch_space, "%s/%s%s", + dbus_test_exec, exe, DBUS_EXEEXT)) + { + _dbus_string_free (scratch_space); + return NULL; + } + + return _dbus_string_get_data (scratch_space); +} static void _dbus_babysitter_block_for_child_exit (DBusBabysitter *sitter) @@ -1375,10 +1405,18 @@ check_spawn_segfault (void *data) char *argv[4] = { NULL, NULL, NULL, NULL }; DBusBabysitter *sitter = NULL; DBusError error = DBUS_ERROR_INIT; + DBusString argv0; /*** Test launching segfault binary */ - - argv[0] = TEST_SEGFAULT_BINARY; + + argv[0] = get_test_exec ("test-segfault", &argv0); + + if (argv[0] == NULL) + { + /* OOM was simulated, never mind */ + return TRUE; + } + if (_dbus_spawn_async_with_babysitter (&sitter, argv, NULL, NULL, NULL, &error)) @@ -1387,6 +1425,8 @@ check_spawn_segfault (void *data) _dbus_babysitter_set_child_exit_error (sitter, &error); } + _dbus_string_free (&argv0); + if (sitter) _dbus_babysitter_unref (sitter); @@ -1416,10 +1456,18 @@ check_spawn_exit (void *data) char *argv[4] = { NULL, NULL, NULL, NULL }; DBusBabysitter *sitter = NULL; DBusError error = DBUS_ERROR_INIT; + DBusString argv0; /*** Test launching exit failure binary */ - - argv[0] = TEST_EXIT_BINARY; + + argv[0] = get_test_exec ("test-exit", &argv0); + + if (argv[0] == NULL) + { + /* OOM was simulated, never mind */ + return TRUE; + } + if (_dbus_spawn_async_with_babysitter (&sitter, argv, NULL, NULL, NULL, &error)) @@ -1428,6 +1476,8 @@ check_spawn_exit (void *data) _dbus_babysitter_set_child_exit_error (sitter, &error); } + _dbus_string_free (&argv0); + if (sitter) _dbus_babysitter_unref (sitter); @@ -1457,10 +1507,18 @@ check_spawn_and_kill (void *data) char *argv[4] = { NULL, NULL, NULL, NULL }; DBusBabysitter *sitter = NULL; DBusError error = DBUS_ERROR_INIT; + DBusString argv0; /*** Test launching sleeping binary then killing it */ - argv[0] = TEST_SLEEP_FOREVER_BINARY; + argv[0] = get_test_exec ("test-sleep-forever", &argv0); + + if (argv[0] == NULL) + { + /* OOM was simulated, never mind */ + return TRUE; + } + if (_dbus_spawn_async_with_babysitter (&sitter, argv, NULL, NULL, NULL, &error)) @@ -1472,6 +1530,8 @@ check_spawn_and_kill (void *data) _dbus_babysitter_set_child_exit_error (sitter, &error); } + _dbus_string_free (&argv0); + if (sitter) _dbus_babysitter_unref (sitter);