goto nomem_2;
if (!_dbus_server_init_base (&debug_server->base,
- &debug_vtable, &address))
- goto nomem_3;
+ &debug_vtable, &address,
+ error))
+ goto fail_3;
if (!_dbus_hash_table_insert_string (server_pipe_hash,
debug_server->name,
nomem_4:
_dbus_server_finalize_base (&debug_server->base);
- nomem_3:
+ fail_3:
dbus_free (debug_server->name);
nomem_2:
_dbus_string_free (&address);
dbus_free (debug_server);
nomem_0:
pipe_hash_unref ();
- dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL);
+ if (error != NULL && !dbus_error_is_set (error))
+ _DBUS_SET_OOM (error);
return NULL;
}
dbus_bool_t _dbus_server_init_base (DBusServer *server,
const DBusServerVTable *vtable,
- const DBusString *address);
+ const DBusString *address,
+ DBusError *error);
void _dbus_server_finalize_base (DBusServer *server);
dbus_bool_t _dbus_server_add_watch (DBusServer *server,
DBusWatch *watch);
}
if (!_dbus_server_init_base (&socket_server->base,
- &socket_vtable, address))
+ &socket_vtable, address,
+ error))
goto failed_2;
server = (DBusServer*)socket_server;
* @param server the server.
* @param vtable the vtable for the subclass.
* @param address the server's address
+ * @param error location to store reason for failure
* @returns #TRUE on success.
*/
dbus_bool_t
_dbus_server_init_base (DBusServer *server,
const DBusServerVTable *vtable,
- const DBusString *address)
+ const DBusString *address,
+ DBusError *error)
{
server->vtable = vtable;
server->published_address = FALSE;
if (!_dbus_string_init (&server->guid_hex))
- return FALSE;
+ {
+ _DBUS_SET_OOM (error);
+ return FALSE;
+ }
_dbus_generate_uuid (&server->guid);
if (!_dbus_uuid_encode (&server->guid, &server->guid_hex))
- goto failed;
+ goto oom;
server->address = copy_address_with_guid_appended (address,
&server->guid_hex);
if (server->address == NULL)
- goto failed;
+ goto oom;
_dbus_rmutex_new_at_location (&server->mutex);
if (server->mutex == NULL)
- goto failed;
+ goto oom;
server->watches = _dbus_watch_list_new ();
if (server->watches == NULL)
- goto failed;
+ goto oom;
server->timeouts = _dbus_timeout_list_new ();
if (server->timeouts == NULL)
- goto failed;
+ goto oom;
_dbus_data_slot_list_init (&server->slot_list);
return TRUE;
- failed:
+ oom:
+ _DBUS_SET_OOM (error);
_dbus_rmutex_free_at_location (&server->mutex);
server->mutex = NULL;
if (server->watches)