From 5f925b1668a442c91e7563e090698ff6b3c02349 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 15 Oct 2020 17:53:30 +0100 Subject: [PATCH] bluez5 - fix infinite loop where ping cvauses device eval which loops --- src/modules/bluez5/bz.h | 1 + src/modules/bluez5/bz_obj.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/modules/bluez5/bz.h b/src/modules/bluez5/bz.h index b168c71a8..805f28584 100644 --- a/src/modules/bluez5/bz.h +++ b/src/modules/bluez5/bz.h @@ -22,6 +22,7 @@ struct _Obj { Eina_Bool add_called : 1; Eina_Bool ping_ok : 1; Eina_Bool ping_busy : 1; + Eina_Bool ping_block : 1; Ecore_Timer *ping_timer; //// public data to read const char *path; diff --git a/src/modules/bluez5/bz_obj.c b/src/modules/bluez5/bz_obj.c index 0b2cee3a0..84e13624b 100644 --- a/src/modules/bluez5/bz_obj.c +++ b/src/modules/bluez5/bz_obj.c @@ -658,6 +658,7 @@ ping_schedule(Obj *o) double timeout = ping_powersave_timeout_get() + 1.0; if (o->ping_timer) ecore_timer_del(o->ping_timer); + printf("@@@ new ping in %1.3f\n", timeout); o->ping_timer = ecore_timer_add(timeout, cb_ping_timer, o); } @@ -667,6 +668,8 @@ cb_ping_timer(void *data) Obj *o = data; printf("@@@ ping timer %s\n", o->address); + o->ping_timer = NULL; + o->ping_block = EINA_TRUE; if (o->ping_busy) { o->ping_busy = EINA_FALSE; @@ -677,6 +680,7 @@ cb_ping_timer(void *data) if (o->fn_change) o->fn_change(o); } } + o->ping_block = EINA_FALSE; ping_do(o); ping_schedule(o); return EINA_TRUE; @@ -685,7 +689,7 @@ cb_ping_timer(void *data) void bz_obj_ping_begin(Obj *o) { - if (o->ping_timer) return; + if ((o->ping_timer) || (o->ping_block)) return; if (o->ping_busy) { o->ping_busy = EINA_FALSE;