mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 22:41:43 +00:00
Avoid calling unsetenv too late
Stash the DESKTOP_AUTOSTART_ID env var in a constructor, before any threads have been created. https://bugzilla.gnome.org/show_bug.cgi?id=790963
This commit is contained in:
parent
845f2657db
commit
22269902ed
@ -148,18 +148,44 @@ gtk_application_get_proxy_if_service_present (GDBusConnection *connection,
|
||||
return proxy;
|
||||
}
|
||||
|
||||
#ifdef G_HAS_CONSTRUCTORS
|
||||
#ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA
|
||||
#pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(stash_desktop_autostart_id)
|
||||
#endif
|
||||
G_DEFINE_CONSTRUCTOR(stash_desktop_autostart_id)
|
||||
#endif
|
||||
|
||||
static char *client_id = NULL;
|
||||
|
||||
static void
|
||||
stash_desktop_autostart_id (void)
|
||||
{
|
||||
const char *desktop_autostart_id;
|
||||
|
||||
desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
|
||||
client_id = g_strdup (desktop_autostart_id ? desktop_autostart_id : "");
|
||||
|
||||
/* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to
|
||||
* use the same client id.
|
||||
*/
|
||||
g_unsetenv ("DESKTOP_AUTOSTART_ID");
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_application_impl_dbus_startup (GtkApplicationImpl *impl,
|
||||
gboolean register_session)
|
||||
{
|
||||
GtkApplicationImplDBus *dbus = (GtkApplicationImplDBus *) impl;
|
||||
static gchar *client_id;
|
||||
GError *error = NULL;
|
||||
GVariant *res;
|
||||
gboolean same_bus;
|
||||
const char *bus_name;
|
||||
const char *client_interface;
|
||||
|
||||
#ifndef G_HAS_CONSTRUCTORS
|
||||
stash_desktop_autostart_id ();
|
||||
#endif
|
||||
|
||||
dbus->session = g_application_get_dbus_connection (G_APPLICATION (impl->application));
|
||||
|
||||
if (!dbus->session)
|
||||
@ -169,18 +195,6 @@ gtk_application_impl_dbus_startup (GtkApplicationImpl *impl,
|
||||
dbus->object_path = g_application_get_dbus_object_path (G_APPLICATION (impl->application));
|
||||
dbus->unique_name = g_dbus_connection_get_unique_name (dbus->session);
|
||||
|
||||
if (client_id == NULL)
|
||||
{
|
||||
const gchar *desktop_autostart_id;
|
||||
|
||||
desktop_autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
|
||||
/* Unset DESKTOP_AUTOSTART_ID in order to avoid child processes to
|
||||
* use the same client id.
|
||||
*/
|
||||
g_unsetenv ("DESKTOP_AUTOSTART_ID");
|
||||
client_id = g_strdup (desktop_autostart_id ? desktop_autostart_id : "");
|
||||
}
|
||||
|
||||
g_debug ("Connecting to session manager");
|
||||
|
||||
/* Try the GNOME session manager first */
|
||||
|
Loading…
Reference in New Issue
Block a user