diff options
author | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-02-22 18:47:51 +0000 |
---|---|---|
committer | Simon McVittie <simon.mcvittie@collabora.co.uk> | 2011-02-25 16:59:10 +0000 |
commit | d59434e2b004ab716a9fa7d3e11a6f18e4833250 (patch) | |
tree | 964fb30d1a4a8712d40062f04308e22136462bd2 | |
parent | f28ac2f2f579a5dab97dd6ce57bce484ffa43593 (diff) |
internal_bus_get: centralize error handling
-rw-r--r-- | dbus/dbus-bus.c | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/dbus/dbus-bus.c b/dbus/dbus-bus.c index 8cb82eb8..0f46699c 100644 --- a/dbus/dbus-bus.c +++ b/dbus/dbus-bus.c @@ -434,13 +434,14 @@ internal_bus_get (DBusBusType type, _dbus_return_val_if_fail (type >= 0 && type < N_BUS_TYPES, NULL); _dbus_return_val_if_error_is_set (error, NULL); + connection = NULL; + _DBUS_LOCK (bus); if (!init_connections_unlocked ()) { - _DBUS_UNLOCK (bus); _DBUS_SET_OOM (error); - return NULL; + goto out; } /* We want to use the activation address even if the @@ -462,9 +463,7 @@ internal_bus_get (DBusBusType type, { connection = bus_connections[type]; dbus_connection_ref (connection); - - _DBUS_UNLOCK (bus); - return connection; + goto out; } address = bus_connection_addresses[address_type]; @@ -472,8 +471,7 @@ internal_bus_get (DBusBusType type, { dbus_set_error (error, DBUS_ERROR_FAILED, "Unable to determine the address of the message bus (try 'man dbus-launch' and 'man dbus-daemon' for help)"); - _DBUS_UNLOCK (bus); - return NULL; + goto out; } if (private) @@ -483,19 +481,15 @@ internal_bus_get (DBusBusType type, if (!connection) { - _DBUS_ASSERT_ERROR_IS_SET (error); - _DBUS_UNLOCK (bus); - return NULL; + goto out; } if (!dbus_bus_register (connection, error)) { - _DBUS_ASSERT_ERROR_IS_SET (error); _dbus_connection_close_possibly_shared (connection); dbus_connection_unref (connection); - - _DBUS_UNLOCK (bus); - return NULL; + connection = NULL; + goto out; } if (!private) @@ -520,10 +514,12 @@ internal_bus_get (DBusBusType type, bd->is_well_known = TRUE; _DBUS_UNLOCK (bus_datas); - - _DBUS_UNLOCK (bus); +out: + /* Return a reference to the caller, or NULL with error set. */ + if (connection == NULL) + _DBUS_ASSERT_ERROR_IS_SET (error); - /* Return a reference to the caller */ + _DBUS_UNLOCK (bus); return connection; } |