mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-12 15:36:17 +01:00
Merge branch '604-dbus-name-watching-simplification' into 'master'
gdbusnamewatching: Check cancellation of a watch before calling back Closes #604 See merge request GNOME/glib!1336
This commit is contained in:
commit
5d32b99d0c
@ -148,6 +148,11 @@ call_handler_data_free (CallHandlerData *data)
|
||||
static void
|
||||
actually_do_call (Client *client, GDBusConnection *connection, const gchar *name_owner, CallType call_type)
|
||||
{
|
||||
/* The client might have been cancelled (g_bus_unwatch_name()) while we were
|
||||
* sitting in the #GMainContext dispatch queue. */
|
||||
if (client->cancelled)
|
||||
return;
|
||||
|
||||
switch (call_type)
|
||||
{
|
||||
case CALL_TYPE_NAME_APPEARED:
|
||||
@ -234,13 +239,12 @@ call_appeared_handler (Client *client)
|
||||
}
|
||||
|
||||
static void
|
||||
call_vanished_handler (Client *client,
|
||||
gboolean ignore_cancelled)
|
||||
call_vanished_handler (Client *client)
|
||||
{
|
||||
if (client->previous_call != PREVIOUS_CALL_VANISHED)
|
||||
{
|
||||
client->previous_call = PREVIOUS_CALL_VANISHED;
|
||||
if (((!client->cancelled) || ignore_cancelled) && client->name_vanished_handler != NULL)
|
||||
if (!client->cancelled && client->name_vanished_handler != NULL)
|
||||
{
|
||||
do_call (client, CALL_TYPE_NAME_VANISHED);
|
||||
}
|
||||
@ -296,7 +300,7 @@ on_connection_disconnected (GDBusConnection *connection,
|
||||
client->name_owner_changed_subscription_id = 0;
|
||||
client->connection = NULL;
|
||||
|
||||
call_vanished_handler (client, FALSE);
|
||||
call_vanished_handler (client);
|
||||
|
||||
client_unref (client);
|
||||
}
|
||||
@ -345,7 +349,7 @@ on_name_owner_changed (GDBusConnection *connection,
|
||||
{
|
||||
g_free (client->name_owner);
|
||||
client->name_owner = NULL;
|
||||
call_vanished_handler (client, FALSE);
|
||||
call_vanished_handler (client);
|
||||
}
|
||||
|
||||
if (new_owner != NULL && strlen (new_owner) > 0)
|
||||
@ -390,7 +394,7 @@ get_name_owner_cb (GObject *source_object,
|
||||
}
|
||||
else
|
||||
{
|
||||
call_vanished_handler (client, FALSE);
|
||||
call_vanished_handler (client);
|
||||
}
|
||||
|
||||
client->initialized = TRUE;
|
||||
@ -450,7 +454,7 @@ start_service_by_name_cb (GObject *source_object,
|
||||
else
|
||||
{
|
||||
g_warning ("Unexpected reply %d from StartServiceByName() method", start_service_result);
|
||||
call_vanished_handler (client, FALSE);
|
||||
call_vanished_handler (client);
|
||||
client->initialized = TRUE;
|
||||
}
|
||||
}
|
||||
@ -529,7 +533,7 @@ connection_get_cb (GObject *source_object,
|
||||
client->connection = g_bus_get_finish (res, NULL);
|
||||
if (client->connection == NULL)
|
||||
{
|
||||
call_vanished_handler (client, FALSE);
|
||||
call_vanished_handler (client);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user