diff options
| author | Vinicius Gomes <vinicius.gomes@openbossa.org> | 2008-04-14 21:10:27 +0000 | 
|---|---|---|
| committer | Vinicius Gomes <vinicius.gomes@openbossa.org> | 2008-04-14 21:10:27 +0000 | 
| commit | fb306e968c0fc7a621df09c2c544db895d0b3419 (patch) | |
| tree | 576f271ed9ac0e3661987d2b7147ba218a3a8659 | |
| parent | cddee8f1044440a24f2c2ea98ebf529dc3db7de0 (diff) | |
hcid: removing device object when some error occurs during bonding process
| -rw-r--r-- | hcid/adapter.c | 14 | ||||
| -rw-r--r-- | hcid/adapter.h | 2 | ||||
| -rw-r--r-- | hcid/dbus-hci.c | 5 | 
3 files changed, 21 insertions, 0 deletions
| diff --git a/hcid/adapter.c b/hcid/adapter.c index cd75e6c9..47dbed1d 100644 --- a/hcid/adapter.c +++ b/hcid/adapter.c @@ -2442,6 +2442,19 @@ struct device *adapter_get_device(DBusConnection *conn,  	return adapter_create_device(conn, adapter, address);  } +void remove_pending_device(struct adapter *adapter) +{ +	struct device *device; +	char address[18]; + +	ba2str(&adapter->bonding->bdaddr, address); +	device = adapter_find_device(adapter, address); +	if (!device) +		return; + +	adapter_remove_device(adapter->bonding->conn, adapter, device); +} +  static gboolean create_bonding_conn_complete(GIOChannel *io, GIOCondition cond,  						struct adapter *adapter)  { @@ -2561,6 +2574,7 @@ static gboolean create_bonding_conn_complete(GIOChannel *io, GIOCondition cond,  failed:  	g_io_channel_close(io); +	remove_pending_device(adapter);  cleanup:  	name_listener_remove(adapter->bonding->conn, diff --git a/hcid/adapter.h b/hcid/adapter.h index d715d58f..421684f8 100644 --- a/hcid/adapter.h +++ b/hcid/adapter.h @@ -136,3 +136,5 @@ GSList *service_classes_str(uint32_t class);  int pending_remote_name_cancel(struct adapter *adapter);  void dc_pending_timeout_cleanup(struct adapter *adapter); + +void remove_pending_device(struct adapter *adapter); diff --git a/hcid/dbus-hci.c b/hcid/dbus-hci.c index 36c9a9bd..f7233285 100644 --- a/hcid/dbus-hci.c +++ b/hcid/dbus-hci.c @@ -333,6 +333,9 @@ static void reply_pending_requests(const char *path, struct adapter *adapter)  	/* pending bonding */  	if (adapter->bonding) {  		error_authentication_canceled(connection, adapter->bonding->msg); + +		remove_pending_device(adapter); +  		name_listener_remove(connection,  					dbus_message_get_sender(adapter->bonding->msg),  					(name_cb_t) create_bond_req_exit, @@ -2435,6 +2438,8 @@ void create_bond_req_exit(const char *name, struct adapter *adapter)  		g_free(p);  	} +	remove_pending_device(adapter); +  	g_io_channel_close(adapter->bonding->io);  	if (adapter->bonding->io_id)  		g_source_remove(adapter->bonding->io_id); | 
