Linux bluetooth development
 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@vger.kernel.org

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@vger.kernel.org

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

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

* 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@vger.kernel.org

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

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
  -- strict thread matches above, loose matches on Subject: below --
2016-10-02 12:38 jiangbo.wu
2016-10-03  8:11 ` Luiz Augusto von Dentz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox