Hi, On Sun, Oct 2, 2016 at 3:38 PM, <jiangbo.wu@xxxxxxxxx> wrote: > From: Jiangbo Wu <jiangbo.wu@xxxxxxxxx> > > device unable pair since another pairng is in progress, and need to > free bonding before it created for next pairing. > --- > src/device.c | 62 +++++++++++++++++++++++++++++++----------------------------- > 1 file changed, 32 insertions(+), 30 deletions(-) > > diff --git a/src/device.c b/src/device.c > index 25d2e22..fb6104f 100644 > --- a/src/device.c > +++ b/src/device.c > @@ -2314,6 +2314,35 @@ static void create_bond_req_exit(DBusConnection *conn, void *user_data) > } > } > > +static void bonding_request_free(struct bonding_req *bonding) > +{ > + if (!bonding) > + return; > + > + if (bonding->listener_id) > + g_dbus_remove_watch(dbus_conn, bonding->listener_id); > + > + if (bonding->msg) > + dbus_message_unref(bonding->msg); > + > + if (bonding->cb_iter) > + g_free(bonding->cb_iter); > + > + if (bonding->agent) { > + agent_cancel(bonding->agent); > + agent_unref(bonding->agent); > + bonding->agent = NULL; > + } > + > + if (bonding->retry_timer) > + g_source_remove(bonding->retry_timer); > + > + if (bonding->device) > + bonding->device->bonding = NULL; > + > + g_free(bonding); > +} > + > static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, > void *data) > { > @@ -2384,8 +2413,10 @@ static DBusMessage *pair_device(DBusConnection *conn, DBusMessage *msg, > BDADDR_BREDR, io_cap); > } > > - if (err < 0) > + if (err < 0) { > + bonding_request_free(device->bonding); > return btd_error_failed(msg, strerror(-err)); > + } > > return NULL; > } > @@ -2426,35 +2457,6 @@ static DBusMessage *new_authentication_return(DBusMessage *msg, uint8_t status) > } > } > > -static void bonding_request_free(struct bonding_req *bonding) > -{ > - if (!bonding) > - return; > - > - if (bonding->listener_id) > - g_dbus_remove_watch(dbus_conn, bonding->listener_id); > - > - if (bonding->msg) > - dbus_message_unref(bonding->msg); > - > - if (bonding->cb_iter) > - g_free(bonding->cb_iter); > - > - if (bonding->agent) { > - agent_cancel(bonding->agent); > - agent_unref(bonding->agent); > - bonding->agent = NULL; > - } > - > - if (bonding->retry_timer) > - g_source_remove(bonding->retry_timer); > - > - if (bonding->device) > - bonding->device->bonding = NULL; > - > - g_free(bonding); > -} > - > static void device_cancel_bonding(struct btd_device *device, uint8_t status) > { > struct bonding_req *bonding = device->bonding; > -- > 1.9.1 Applied, thanks. -- Luiz Augusto von Dentz -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html