示例#1
0
static void
ide_worker_manager_constructed (GObject *object)
{
  IdeWorkerManager *self = (IdeWorkerManager *)object;
  g_autofree gchar *guid = NULL;
  g_autofree gchar *address = NULL;
  GError *error = NULL;

  g_assert (IDE_IS_WORKER_MANAGER (self));

  G_OBJECT_CLASS (ide_worker_manager_parent_class)->constructed (object);

  if (g_unix_socket_address_abstract_names_supported ())
    {
      address = g_strdup_printf ("unix:abstract=/tmp/gnome-builder-%u", (int)getpid ());
    }
  else
    {
      g_autofree gchar *tmpdir = NULL;

      tmpdir = g_dir_make_tmp ("gnome-builder-worker-XXXXXX", NULL);

      if (tmpdir == NULL)
        {
          g_error ("Failed to determine temporary directory for DBus.");
          exit (EXIT_FAILURE);
        }

      address = g_strdup_printf ("unix:tmpdir=%s", tmpdir);
    }

  guid = g_dbus_generate_guid ();

  self->dbus_server = g_dbus_server_new_sync (address,
                                              G_DBUS_SERVER_FLAGS_NONE,
                                              guid,
                                              NULL,
                                              NULL,
                                              &error);

  if (error != NULL)
    {
      g_error ("%s", error->message);
      exit (EXIT_FAILURE);
    }

  g_signal_connect_object (self->dbus_server,
                           "new-connection",
                           G_CALLBACK (ide_worker_manager_new_connection_cb),
                           self,
                           G_CONNECT_SWAPPED);

  IDE_TRACE_MSG ("GDBusServer listening at %s", address);

  g_dbus_server_start (self->dbus_server);

  g_assert (g_dbus_server_is_active (self->dbus_server));
}
示例#2
0
/**
 * @brief Destroying the GstSwitchController.
 * @memberof GstSwitchController
 * @see GObject
 */
static void
gst_switch_controller_finalize (GstSwitchController * controller)
{
  INFO ("gst_switch_controller finalized");
  if (controller->bus_server) {
    g_dbus_server_stop (controller->bus_server);
    g_assert (!g_dbus_server_is_active (controller->bus_server));
    g_object_unref (controller->bus_server);
    controller->bus_server = NULL;
  }

  g_mutex_clear (&controller->clients_lock);

  if (G_OBJECT_CLASS (gst_switch_controller_parent_class)->finalize)
    (*G_OBJECT_CLASS (gst_switch_controller_parent_class)->finalize)
        (G_OBJECT (controller));
}
示例#3
0
gboolean
_gumd_dbus_server_p2p_stop (
        GumdDbusServer *self)
{
    g_return_val_if_fail (GUMD_IS_DBUS_SERVER_P2P (self), FALSE);

    DBG("Stop P2P DBus Server");

    GumdDbusServerP2P *server = GUMD_DBUS_SERVER_P2P (self);

    if (server->priv->bus_server) {
        if (g_dbus_server_is_active (server->priv->bus_server))
            g_dbus_server_stop (server->priv->bus_server);
        g_object_unref (server->priv->bus_server);
        server->priv->bus_server = NULL;
    }

    return TRUE;
}
示例#4
0
gboolean
_gumd_dbus_server_p2p_start (
        GumdDbusServer *self)
{
    g_return_val_if_fail (GUMD_IS_DBUS_SERVER_P2P (self), FALSE);

    DBG("Start P2P DBus Server");

    GumdDbusServerP2P *server = GUMD_DBUS_SERVER_P2P (self);
    if (!server->priv->bus_server) {
        GError *err = NULL;
        gchar *guid = g_dbus_generate_guid ();
        server->priv->bus_server = g_dbus_server_new_sync (
                server->priv->address, G_DBUS_SERVER_FLAGS_NONE, guid, NULL,
                NULL, &err);
        g_free (guid);

        if (!server->priv->bus_server) {
            WARN ("Failed to start server at address '%s':%s",
                    server->priv->address, err ? err->message : "NULL");
            g_error_free (err);
            return FALSE;
        }

        g_signal_connect (server->priv->bus_server, "new-connection",
                G_CALLBACK(_on_client_request), server);
    }

    if (!g_dbus_server_is_active (server->priv->bus_server)) {
        const gchar *path = NULL;
        g_dbus_server_start (server->priv->bus_server);
        path = g_strstr_len(server->priv->address, -1, "unix:path=") + 10;
        if (path) {
            if (g_chmod (path, S_IRUSR | S_IWUSR) < 0) {
                WARN("Setting server socket permission failed with error '%s'",
                    strerror(errno));
            }
        }
    }
    DBG("Dbus server started at : %s", server->priv->address);

    return TRUE;
}