diff options
author | Martin Pitt <martin.pitt@ubuntu.com> | 2015-01-13 16:13:21 +0100 |
---|---|---|
committer | Martin Pitt <martin.pitt@ubuntu.com> | 2015-01-13 16:13:21 +0100 |
commit | b4cdfcafff171a427debfeaea72b51c9f1ab378e (patch) | |
tree | 0e150a605e9b44e3afb916bf8c7bcdeda9990fc6 | |
parent | 86bcf135519742ebd9607f6f8208cb7d3319d0ee (diff) |
When calling udisks_object_manager_client_new_for_bus_sync() in initable_init()
fails, the _finalize() was previously trying to call
g_signal_handlers_disconnect_by_func() and g_object_unref() on NULL objects.
Check this explicitly.
https://bugs.freedesktop.org/show_bug.cgi?id=77134
-rw-r--r-- | udisks/udisksclient.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/udisks/udisksclient.c b/udisks/udisksclient.c index 0507796..0f2d7b2 100644 --- a/udisks/udisksclient.c +++ b/udisks/udisksclient.c @@ -133,22 +133,26 @@ udisks_client_finalize (GObject *object) if (client->initialization_error != NULL) g_error_free (client->initialization_error); - g_signal_handlers_disconnect_by_func (client->object_manager, - G_CALLBACK (on_object_added), - client); - g_signal_handlers_disconnect_by_func (client->object_manager, - G_CALLBACK (on_object_removed), - client); - g_signal_handlers_disconnect_by_func (client->object_manager, - G_CALLBACK (on_interface_added), - client); - g_signal_handlers_disconnect_by_func (client->object_manager, - G_CALLBACK (on_interface_removed), - client); - g_signal_handlers_disconnect_by_func (client->object_manager, - G_CALLBACK (on_interface_proxy_properties_changed), - client); - g_object_unref (client->object_manager); + /* might be NULL if failing early in the constructor */ + if (client->object_manager != NULL) + { + g_signal_handlers_disconnect_by_func (client->object_manager, + G_CALLBACK (on_object_added), + client); + g_signal_handlers_disconnect_by_func (client->object_manager, + G_CALLBACK (on_object_removed), + client); + g_signal_handlers_disconnect_by_func (client->object_manager, + G_CALLBACK (on_interface_added), + client); + g_signal_handlers_disconnect_by_func (client->object_manager, + G_CALLBACK (on_interface_removed), + client); + g_signal_handlers_disconnect_by_func (client->object_manager, + G_CALLBACK (on_interface_proxy_properties_changed), + client); + g_object_unref (client->object_manager); + } if (client->context != NULL) g_main_context_unref (client->context); |