X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgtestdbus.c;h=4af270be0fb32e625047df3e6e60c2d22e18da51;hb=e55a953642a9e402f4363f9fa347b6061dd78990;hp=17a949675592c777b486484cb40e907794610322;hpb=cb588d45320c5a6b767d299ebd85306d45e1773c;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gtestdbus.c b/gio/gtestdbus.c index 17a9496..4af270b 100644 --- a/gio/gtestdbus.c +++ b/gio/gtestdbus.c @@ -418,6 +418,7 @@ struct _GTestDBusPrivate GTestDBusFlags flags; GPtrArray *service_dirs; GPid bus_pid; + gint bus_stdout_fd; gchar *bus_address; gboolean up; }; @@ -566,13 +567,12 @@ write_config_file (GTestDBus *self) " \n" "\n"); + close (fd); g_file_set_contents (path, contents->str, contents->len, &error); g_assert_no_error (error); g_string_free (contents, TRUE); - close (fd); - return path; } @@ -582,8 +582,8 @@ start_daemon (GTestDBus *self) const gchar *argv[] = {"dbus-daemon", "--print-address", "--config-file=foo", NULL}; gchar *config_path; gchar *config_arg; - gint stdout_fd; GIOChannel *channel; + gint stdout_fd2; gsize termpos; GError *error = NULL; @@ -608,15 +608,21 @@ start_daemon (GTestDBus *self) NULL, &self->priv->bus_pid, NULL, - &stdout_fd, + &self->priv->bus_stdout_fd, NULL, &error); g_assert_no_error (error); _g_test_watcher_add_pid (self->priv->bus_pid); - /* Read bus address from daemon' stdout */ - channel = g_io_channel_unix_new (stdout_fd); + /* Read bus address from daemon' stdout. We have to be careful to avoid + * closing the FD, as it is passed to any D-Bus service activated processes, + * and if we close it, they will get a SIGPIPE and die when they try to write + * to their stdout. */ + stdout_fd2 = dup (self->priv->bus_stdout_fd); + g_assert_cmpint (stdout_fd2, >=, 0); + channel = g_io_channel_unix_new (stdout_fd2); + g_io_channel_read_line (channel, &self->priv->bus_address, NULL, &termpos, &error); g_assert_no_error (error); @@ -660,6 +666,8 @@ stop_daemon (GTestDBus *self) _g_test_watcher_remove_pid (self->priv->bus_pid); g_spawn_close_pid (self->priv->bus_pid); self->priv->bus_pid = 0; + close (self->priv->bus_stdout_fd); + self->priv->bus_stdout_fd = -1; g_free (self->priv->bus_address); self->priv->bus_address = NULL;