All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] src/device: Free bonding while failed to pair device
@ 2016-09-30 15:39 jiangbo.wu
  2016-10-01 16:55 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 5+ messages in thread
From: jiangbo.wu @ 2016-09-30 15:39 UTC (permalink / raw)
  To: martin.xu, johan.hedberg; +Cc: linux-bluetooth, Jiangbo Wu

From: Jiangbo Wu <jiangbo.wu@intel.com>

---
 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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] src/device: Free bonding while failed to pair device
  2016-09-30 15:39 [PATCH] src/device: Free bonding while failed to pair device jiangbo.wu
@ 2016-10-01 16:55 ` Luiz Augusto von Dentz
  2016-10-02 12:30   ` Wu, Jiangbo
  0 siblings, 1 reply; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2016-10-01 16:55 UTC (permalink / raw)
  To: Wu, Jiangbo; +Cc: Xu, Martin, Johan Hedberg, linux-bluetooth

Hi,

On Fri, Sep 30, 2016 at 6:39 PM,  <jiangbo.wu@intel.com> wrote:
> From: Jiangbo Wu <jiangbo.wu@intel.com>

It would be good to have something in the patch description, perhaps
the backtrace if this is a crash fix or perhaps this comes from a
static analyzer?

> ---
>  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
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Luiz Augusto von Dentz

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH] src/device: Free bonding while failed to pair device
  2016-10-01 16:55 ` Luiz Augusto von Dentz
@ 2016-10-02 12:30   ` Wu, Jiangbo
  0 siblings, 0 replies; 5+ messages in thread
From: Wu, Jiangbo @ 2016-10-02 12:30 UTC (permalink / raw)
  To: Luiz Augusto von Dentz; +Cc: Xu, Martin, Johan Hedberg, linux-bluetooth

SGksDQoNCkl0IGNvbWVzIGZyb20gYWN0dWFsbHkgdXNlIGluIG91ciBwcm9kdWN0LiBUaGUgc2Nl
bmFyaW8gaXMgdGhhdDoNCiAgICAgICAgMS4gUGFpciBhIGRldmljZSBuYW1lZCAnQScuDQogICAg
ICAgICAgICBCZWZvcmUgYWdlbnQgZ2l2ZSByZXNwb25zZSBmb3IgcGFpcmluZyBkZXZpY2UgJ0En
Og0KICAgICAgICAyLiBDYWxsIHBhaXIgbWV0aG9kIGFnYWluIHRvIHBhaXIgYW5vdGhlciBkZXZp
Y2UgbmFtZWQgJ0InIC4NCkRldmljZSAnQicgd2lsbCBuZXZlciBiZSBwYWlyZWQgdW50aWwgdHVy
biBvZmYvb24gQmx1ZXRvb3RoLiBZb3UgY2FuIHRyeSBpdCB1c2UgYmx1ZXRvb3RoY3RsLg0KDQpU
aGUgcm9vdCBjYXVzZSBpcyBwYWlyIG1ldGhvZCB3aWxsIGNoZWNrIGRldmljZS0+Ym9uZGluZywg
cmV0dXJuICdJbiBwcm9ncmVzcycgd2hlbiBpdCBleGlzdHMuIE5vcm1hbGx5IGRldmljZSB3aWxs
IGNyZWF0ZSBib25kaW5nLiBJZiBhbm90aGVyIGRldmljZSBpcyBpbiBwYWlyaW5nIHN0YXR1cywg
SXQgd2lsbCBmYWlsIHRvIGNyZWF0ZSBib25kaW5nIGluICdhZGFwdGVyX2NyZWF0ZV9ib25kaW5n
JywgYmVjYXVzZSBhbm90aGVyIHBhaXJpbmcgaXMgaW4gcHJvZ3Jlc3MuIEl0IHdpbGwgbmV2ZXIg
YmUgcGFpcmVkIHRoYXQgZGV2aWNlIGJ5IGNoZWNraW5nIGRldmljZS0+Ym9uZGluZyBpZiBpdCBk
b24ndCBmcmVlIGJvbmRpbmcuIA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTog
THVpeiBBdWd1c3RvIHZvbiBEZW50eiBbbWFpbHRvOmx1aXouZGVudHpAZ21haWwuY29tXSANClNl
bnQ6IFN1bmRheSwgT2N0b2JlciAyLCAyMDE2IDEyOjU2IEFNDQpUbzogV3UsIEppYW5nYm8gPGpp
YW5nYm8ud3VAaW50ZWwuY29tPg0KQ2M6IFh1LCBNYXJ0aW4gPG1hcnRpbi54dUBpbnRlbC5jb20+
OyBKb2hhbiBIZWRiZXJnIDxqb2hhbi5oZWRiZXJnQGdtYWlsLmNvbT47IGxpbnV4LWJsdWV0b290
aEB2Z2VyLmtlcm5lbC5vcmcNClN1YmplY3Q6IFJlOiBbUEFUQ0hdIHNyYy9kZXZpY2U6IEZyZWUg
Ym9uZGluZyB3aGlsZSBmYWlsZWQgdG8gcGFpciBkZXZpY2UNCg0KSGksDQoNCk9uIEZyaSwgU2Vw
IDMwLCAyMDE2IGF0IDY6MzkgUE0sICA8amlhbmdiby53dUBpbnRlbC5jb20+IHdyb3RlOg0KPiBG
cm9tOiBKaWFuZ2JvIFd1IDxqaWFuZ2JvLnd1QGludGVsLmNvbT4NCg0KSXQgd291bGQgYmUgZ29v
ZCB0byBoYXZlIHNvbWV0aGluZyBpbiB0aGUgcGF0Y2ggZGVzY3JpcHRpb24sIHBlcmhhcHMgdGhl
IGJhY2t0cmFjZSBpZiB0aGlzIGlzIGEgY3Jhc2ggZml4IG9yIHBlcmhhcHMgdGhpcyBjb21lcyBm
cm9tIGEgc3RhdGljIGFuYWx5emVyPw0KDQo+IC0tLQ0KPiAgc3JjL2RldmljZS5jIHwgNjIgDQo+
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDMwIGRlbGV0aW9ucygt
KQ0KPg0KPiBkaWZmIC0tZ2l0IGEvc3JjL2RldmljZS5jIGIvc3JjL2RldmljZS5jIGluZGV4IDI1
ZDJlMjIuLmZiNjEwNGYgMTAwNjQ0DQo+IC0tLSBhL3NyYy9kZXZpY2UuYw0KPiArKysgYi9zcmMv
ZGV2aWNlLmMNCj4gQEAgLTIzMTQsNiArMjMxNCwzNSBAQCBzdGF0aWMgdm9pZCBjcmVhdGVfYm9u
ZF9yZXFfZXhpdChEQnVzQ29ubmVjdGlvbiAqY29ubiwgdm9pZCAqdXNlcl9kYXRhKQ0KPiAgICAg
ICAgIH0NCj4gIH0NCj4NCj4gK3N0YXRpYyB2b2lkIGJvbmRpbmdfcmVxdWVzdF9mcmVlKHN0cnVj
dCBib25kaW5nX3JlcSAqYm9uZGluZykgew0KPiArICAgICAgIGlmICghYm9uZGluZykNCj4gKyAg
ICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgICAgIGlmIChib25kaW5nLT5saXN0ZW5l
cl9pZCkNCj4gKyAgICAgICAgICAgICAgIGdfZGJ1c19yZW1vdmVfd2F0Y2goZGJ1c19jb25uLCBi
b25kaW5nLT5saXN0ZW5lcl9pZCk7DQo+ICsNCj4gKyAgICAgICBpZiAoYm9uZGluZy0+bXNnKQ0K
PiArICAgICAgICAgICAgICAgZGJ1c19tZXNzYWdlX3VucmVmKGJvbmRpbmctPm1zZyk7DQo+ICsN
Cj4gKyAgICAgICBpZiAoYm9uZGluZy0+Y2JfaXRlcikNCj4gKyAgICAgICAgICAgICAgIGdfZnJl
ZShib25kaW5nLT5jYl9pdGVyKTsNCj4gKw0KPiArICAgICAgIGlmIChib25kaW5nLT5hZ2VudCkg
ew0KPiArICAgICAgICAgICAgICAgYWdlbnRfY2FuY2VsKGJvbmRpbmctPmFnZW50KTsNCj4gKyAg
ICAgICAgICAgICAgIGFnZW50X3VucmVmKGJvbmRpbmctPmFnZW50KTsNCj4gKyAgICAgICAgICAg
ICAgIGJvbmRpbmctPmFnZW50ID0gTlVMTDsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBp
ZiAoYm9uZGluZy0+cmV0cnlfdGltZXIpDQo+ICsgICAgICAgICAgICAgICBnX3NvdXJjZV9yZW1v
dmUoYm9uZGluZy0+cmV0cnlfdGltZXIpOw0KPiArDQo+ICsgICAgICAgaWYgKGJvbmRpbmctPmRl
dmljZSkNCj4gKyAgICAgICAgICAgICAgIGJvbmRpbmctPmRldmljZS0+Ym9uZGluZyA9IE5VTEw7
DQo+ICsNCj4gKyAgICAgICBnX2ZyZWUoYm9uZGluZyk7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBE
QnVzTWVzc2FnZSAqcGFpcl9kZXZpY2UoREJ1c0Nvbm5lY3Rpb24gKmNvbm4sIERCdXNNZXNzYWdl
ICptc2csDQo+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkIA0KPiAqZGF0YSkgIHsgQEAgLTIzODQsOCArMjQxMywxMCBA
QCBzdGF0aWMgREJ1c01lc3NhZ2UgDQo+ICpwYWlyX2RldmljZShEQnVzQ29ubmVjdGlvbiAqY29u
biwgREJ1c01lc3NhZ2UgKm1zZywNCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCREFERFJfQlJFRFIsIGlvX2NhcCk7DQo+ICAgICAgICAg
fQ0KPg0KPiAtICAgICAgIGlmIChlcnIgPCAwKQ0KPiArICAgICAgIGlmIChlcnIgPCAwKSB7DQo+
ICsgICAgICAgICAgICAgICBib25kaW5nX3JlcXVlc3RfZnJlZShkZXZpY2UtPmJvbmRpbmcpOw0K
PiAgICAgICAgICAgICAgICAgcmV0dXJuIGJ0ZF9lcnJvcl9mYWlsZWQobXNnLCBzdHJlcnJvcigt
ZXJyKSk7DQo+ICsgICAgICAgfQ0KPg0KPiAgICAgICAgIHJldHVybiBOVUxMOw0KPiAgfQ0KPiBA
QCAtMjQyNiwzNSArMjQ1Nyw2IEBAIHN0YXRpYyBEQnVzTWVzc2FnZSAqbmV3X2F1dGhlbnRpY2F0
aW9uX3JldHVybihEQnVzTWVzc2FnZSAqbXNnLCB1aW50OF90IHN0YXR1cykNCj4gICAgICAgICB9
DQo+ICB9DQo+DQo+IC1zdGF0aWMgdm9pZCBib25kaW5nX3JlcXVlc3RfZnJlZShzdHJ1Y3QgYm9u
ZGluZ19yZXEgKmJvbmRpbmcpIC17DQo+IC0gICAgICAgaWYgKCFib25kaW5nKQ0KPiAtICAgICAg
ICAgICAgICAgcmV0dXJuOw0KPiAtDQo+IC0gICAgICAgaWYgKGJvbmRpbmctPmxpc3RlbmVyX2lk
KQ0KPiAtICAgICAgICAgICAgICAgZ19kYnVzX3JlbW92ZV93YXRjaChkYnVzX2Nvbm4sIGJvbmRp
bmctPmxpc3RlbmVyX2lkKTsNCj4gLQ0KPiAtICAgICAgIGlmIChib25kaW5nLT5tc2cpDQo+IC0g
ICAgICAgICAgICAgICBkYnVzX21lc3NhZ2VfdW5yZWYoYm9uZGluZy0+bXNnKTsNCj4gLQ0KPiAt
ICAgICAgIGlmIChib25kaW5nLT5jYl9pdGVyKQ0KPiAtICAgICAgICAgICAgICAgZ19mcmVlKGJv
bmRpbmctPmNiX2l0ZXIpOw0KPiAtDQo+IC0gICAgICAgaWYgKGJvbmRpbmctPmFnZW50KSB7DQo+
IC0gICAgICAgICAgICAgICBhZ2VudF9jYW5jZWwoYm9uZGluZy0+YWdlbnQpOw0KPiAtICAgICAg
ICAgICAgICAgYWdlbnRfdW5yZWYoYm9uZGluZy0+YWdlbnQpOw0KPiAtICAgICAgICAgICAgICAg
Ym9uZGluZy0+YWdlbnQgPSBOVUxMOw0KPiAtICAgICAgIH0NCj4gLQ0KPiAtICAgICAgIGlmIChi
b25kaW5nLT5yZXRyeV90aW1lcikNCj4gLSAgICAgICAgICAgICAgIGdfc291cmNlX3JlbW92ZShi
b25kaW5nLT5yZXRyeV90aW1lcik7DQo+IC0NCj4gLSAgICAgICBpZiAoYm9uZGluZy0+ZGV2aWNl
KQ0KPiAtICAgICAgICAgICAgICAgYm9uZGluZy0+ZGV2aWNlLT5ib25kaW5nID0gTlVMTDsNCj4g
LQ0KPiAtICAgICAgIGdfZnJlZShib25kaW5nKTsNCj4gLX0NCj4gLQ0KPiAgc3RhdGljIHZvaWQg
ZGV2aWNlX2NhbmNlbF9ib25kaW5nKHN0cnVjdCBidGRfZGV2aWNlICpkZXZpY2UsIHVpbnQ4X3Qg
DQo+IHN0YXR1cykgIHsNCj4gICAgICAgICBzdHJ1Y3QgYm9uZGluZ19yZXEgKmJvbmRpbmcgPSBk
ZXZpY2UtPmJvbmRpbmc7DQo+IC0tDQo+IDEuOS4xDQo+DQo+IC0tDQo+IFRvIHVuc3Vic2NyaWJl
IGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSANCj4gbGludXgtYmx1
ZXRvb3RoIiBpbiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVs
Lm9yZyANCj4gTW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9t
YWpvcmRvbW8taW5mby5odG1sDQoNCg0KDQotLQ0KTHVpeiBBdWd1c3RvIHZvbiBEZW50eg0K

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] src/device: Free bonding while failed to pair device
  2016-10-02 12:38 jiangbo.wu
@ 2016-10-03  8:11 ` Luiz Augusto von Dentz
  0 siblings, 0 replies; 5+ messages in thread
From: Luiz Augusto von Dentz @ 2016-10-03  8:11 UTC (permalink / raw)
  To: Wu, Jiangbo; +Cc: Xu, Martin, Johan Hedberg, linux-bluetooth

Hi,

On Sun, Oct 2, 2016 at 3:38 PM,  <jiangbo.wu@intel.com> wrote:
> From: Jiangbo Wu <jiangbo.wu@intel.com>
>
> 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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] src/device: Free bonding while failed to pair device
@ 2016-10-02 12:38 jiangbo.wu
  2016-10-03  8:11 ` Luiz Augusto von Dentz
  0 siblings, 1 reply; 5+ messages in thread
From: jiangbo.wu @ 2016-10-02 12:38 UTC (permalink / raw)
  To: luiz.dentz, martin.xu, johan.hedberg; +Cc: linux-bluetooth, Jiangbo Wu

From: Jiangbo Wu <jiangbo.wu@intel.com>

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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-10-03  8:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-30 15:39 [PATCH] src/device: Free bonding while failed to pair device jiangbo.wu
2016-10-01 16:55 ` Luiz Augusto von Dentz
2016-10-02 12:30   ` Wu, Jiangbo
2016-10-02 12:38 jiangbo.wu
2016-10-03  8:11 ` Luiz Augusto von Dentz

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.