raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=5f925b1668a442c91e7563e090698ff6b3c02349

commit 5f925b1668a442c91e7563e090698ff6b3c02349
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Thu Oct 15 17:53:30 2020 +0100

    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;

-- 


Reply via email to