Revert "Avoid a race between MicroB startup and establishing D-Bus watch for it"
authorSteven Luo <steven+maemo@steven676.net>
Mon, 22 Feb 2010 10:43:59 +0000 (02:43 -0800)
committerSteven Luo <steven+maemo@steven676.net>
Mon, 22 Feb 2010 10:43:59 +0000 (02:43 -0800)
This reverts commit 807b507a9f6cc3be8f12d68f7849da970652a9a6.

launcher.c

index 09428a9..10ff41b 100644 (file)
@@ -228,41 +228,6 @@ void launch_microb(struct swb_context *ctx, char *uri) {
        }
        free(microb_profile_dir);
 
        }
        free(microb_profile_dir);
 
-       /* Set up the D-Bus eavesdropping we'll use to watch for MicroB
-          acquiring the com.nokia.osso_browser D-Bus name.  Again, this needs
-          to happen before the browser is launched, so that there's no race
-          between establishing the watch and browser startup.
-
-          Ideas for how to do this monitoring derived from the dbus-monitor
-          code (tools/dbus-monitor.c in the D-Bus codebase). */
-       dbus_error_init(&dbus_error);
-
-       raw_connection = dbus_bus_get_private(DBUS_BUS_SESSION, &dbus_error);
-       if (!raw_connection) {
-               fprintf(stderr,
-                       "Failed to open connection to session bus: %s\n",
-                       dbus_error.message);
-               dbus_error_free(&dbus_error);
-               exit(1);
-       }
-
-       dbus_bus_add_match(raw_connection,
-                          "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='com.nokia.osso_browser'",
-                          &dbus_error);
-       if (dbus_error_is_set(&dbus_error)) {
-               fprintf(stderr,
-                       "Failed to set up watch for browser UI start: %s\n",
-                       dbus_error.message);
-               dbus_error_free(&dbus_error);
-               exit(1);
-       }
-       filter_func = check_microb_started;
-       if (!dbus_connection_add_filter(raw_connection,
-                                       filter_func, NULL, NULL)) {
-               fprintf(stderr, "Failed to set up watch filter!\n");
-               exit(1);
-       }
-
        if ((pid = fork()) == -1) {
                perror("fork");
                exit(1);
        if ((pid = fork()) == -1) {
                perror("fork");
                exit(1);
@@ -273,8 +238,40 @@ void launch_microb(struct swb_context *ctx, char *uri) {
                /* Wait for our child to start the browser UI process and
                   for it to acquire the com.nokia.osso_browser D-Bus name,
                   then make the appropriate method call to open the browser
                /* Wait for our child to start the browser UI process and
                   for it to acquire the com.nokia.osso_browser D-Bus name,
                   then make the appropriate method call to open the browser
-                  window. */
+                  window.
+
+                  Ideas for how to do this monitoring derived from the
+                  dbus-monitor code (tools/dbus-monitor.c in the D-Bus
+                  codebase). */
                microb_started = 0;
                microb_started = 0;
+               dbus_error_init(&dbus_error);
+
+               raw_connection = dbus_bus_get_private(DBUS_BUS_SESSION,
+                                                     &dbus_error);
+               if (!raw_connection) {
+                       fprintf(stderr,
+                               "Failed to open connection to session bus: %s\n",
+                               dbus_error.message);
+                       dbus_error_free(&dbus_error);
+                       exit(1);
+               }
+
+               dbus_bus_add_match(raw_connection,
+                                  "type='signal',interface='org.freedesktop.DBus',member='NameOwnerChanged',arg0='com.nokia.osso_browser'",
+                                  &dbus_error);
+               if (dbus_error_is_set(&dbus_error)) {
+                       fprintf(stderr,
+                               "Failed to set up watch for browser UI start: %s\n",
+                               dbus_error.message);
+                       dbus_error_free(&dbus_error);
+                       exit(1);
+               }
+               filter_func = check_microb_started;
+               if (!dbus_connection_add_filter(raw_connection,
+                                               filter_func, NULL, NULL)) {
+                       fprintf(stderr, "Failed to set up watch filter!\n");
+                       exit(1);
+               }
                printf("Waiting for MicroB to start\n");
                while (!microb_started &&
                       dbus_connection_read_write_dispatch(raw_connection,
                printf("Waiting for MicroB to start\n");
                while (!microb_started &&
                       dbus_connection_read_write_dispatch(raw_connection,
@@ -458,8 +455,6 @@ void launch_microb(struct swb_context *ctx, char *uri) {
                }
        } else {
                /* Child process */
                }
        } else {
                /* Child process */
-               dbus_connection_close(raw_connection);
-               dbus_connection_unref(raw_connection);
                close(fd);
                close_stdio();
 
                close(fd);
                close_stdio();