diff mbox series

[1/1] add hog ref before adding to instances

Message ID 20200420184029.22891-1-scerveau@collabora.com (mailing list archive)
State Accepted
Delegated to: Luiz Von Dentz
Headers show
Series [1/1] add hog ref before adding to instances | expand

Commit Message

Stéphane Cerveau April 20, 2020, 6:40 p.m. UTC
To avoid a double hog free, need to add a ref
when adding the hog to the slist.

This bug has been reproduced with gamepad-8718
which was connecting/disconnecting frantically.

Fix also a typo in the method hog_attach_instance
---
 profiles/input/hog-lib.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Luiz Augusto von Dentz April 21, 2020, 5:15 p.m. UTC | #1
Hi Stéphane,

On Mon, Apr 20, 2020 at 11:42 AM Stéphane Cerveau
<scerveau@collabora.com> wrote:
>
> To avoid a double hog free, need to add a ref
> when adding the hog to the slist.
>
> This bug has been reproduced with gamepad-8718
> which was connecting/disconnecting frantically.
>
> Fix also a typo in the method hog_attach_instance
> ---
>  profiles/input/hog-lib.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
> index 9c5c814a7..8fb0283ca 100644
> --- a/profiles/input/hog-lib.c
> +++ b/profiles/input/hog-lib.c
> @@ -1357,7 +1357,7 @@ static struct bt_hog *hog_new(int fd, const char *name, uint16_t vendor,
>         return hog;
>  }
>
> -static void hog_attach_instace(struct bt_hog *hog,
> +static void hog_attach_instance(struct bt_hog *hog,
>                                 struct gatt_db_attribute *attr)
>  {
>         struct bt_hog *instance;
> @@ -1373,14 +1373,14 @@ static void hog_attach_instace(struct bt_hog *hog,
>         if (!instance)
>                 return;
>
> -       hog->instances = g_slist_append(hog->instances, instance);
> +       hog->instances = g_slist_append(hog->instances, bt_hog_ref(instance));
>  }
>
>  static void foreach_hog_service(struct gatt_db_attribute *attr, void *user_data)
>  {
>         struct bt_hog *hog = user_data;
>
> -       hog_attach_instace(hog, attr);
> +       hog_attach_instance(hog, attr);
>  }
>
>  static void dis_notify(uint8_t source, uint16_t vendor, uint16_t product,
> --
> 2.17.1

Applied, thanks.
diff mbox series

Patch

diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c
index 9c5c814a7..8fb0283ca 100644
--- a/profiles/input/hog-lib.c
+++ b/profiles/input/hog-lib.c
@@ -1357,7 +1357,7 @@  static struct bt_hog *hog_new(int fd, const char *name, uint16_t vendor,
 	return hog;
 }
 
-static void hog_attach_instace(struct bt_hog *hog,
+static void hog_attach_instance(struct bt_hog *hog,
 				struct gatt_db_attribute *attr)
 {
 	struct bt_hog *instance;
@@ -1373,14 +1373,14 @@  static void hog_attach_instace(struct bt_hog *hog,
 	if (!instance)
 		return;
 
-	hog->instances = g_slist_append(hog->instances, instance);
+	hog->instances = g_slist_append(hog->instances, bt_hog_ref(instance));
 }
 
 static void foreach_hog_service(struct gatt_db_attribute *attr, void *user_data)
 {
 	struct bt_hog *hog = user_data;
 
-	hog_attach_instace(hog, attr);
+	hog_attach_instance(hog, attr);
 }
 
 static void dis_notify(uint8_t source, uint16_t vendor, uint16_t product,