netstar pushed a commit to branch master.

http://git.enlightenment.org/apps/evisum.git/commit/?id=d2be618e7ed19df4396f1159c9d7b58bfc3b07c9

commit d2be618e7ed19df4396f1159c9d7b58bfc3b07c9
Author: Alastair Poole <nets...@gmail.com>
Date:   Wed Mar 10 17:36:42 2021 +0000

    network: ...
---
 src/bin/ui/ui_network.c | 74 ++++++++++++++++++++++++-------------------------
 1 file changed, 36 insertions(+), 38 deletions(-)

diff --git a/src/bin/ui/ui_network.c b/src/bin/ui/ui_network.c
index 0dc23c7..b07ad32 100644
--- a/src/bin/ui/ui_network.c
+++ b/src/bin/ui/ui_network.c
@@ -4,11 +4,8 @@
 typedef struct
 {
    Ecore_Thread          *thread;
-   Eina_List             *interfaces;
    Evas_Object           *win;
    Evas_Object           *glist;
-   Eina_List             *purge;
-   Eina_Bool              skip_wait;
    Elm_Genlist_Item_Class itc, itc2;
    Ui                    *ui;
 } Ui_Data;
@@ -28,16 +25,16 @@ typedef struct
    Evas_Object     *obj;
    Elm_Object_Item *it, *it2;
    Eina_Bool        is_new;
+   Eina_Bool        delete_me;
 } Network_Interface;
 
-
 static void
 _interface_gone(net_iface_t **ifaces, int n, Eina_List *list, Ui_Data *pd)
 {
-   Eina_List *l, *l2;
+   Eina_List *l;
    Network_Interface *iface;
 
-   EINA_LIST_FOREACH_SAFE(list, l, l2, iface)
+   EINA_LIST_FOREACH(list, l, iface)
      {
         Eina_Bool found = 0;
         for (int i = 0; i < n; i++)
@@ -50,14 +47,7 @@ _interface_gone(net_iface_t **ifaces, int n, Eina_List 
*list, Ui_Data *pd)
                }
           }
         if (!found)
-          {
-             if (iface->it)
-               pd->purge = eina_list_append(pd->purge, iface->it);
-             if (iface->it2)
-               pd->purge = eina_list_append(pd->purge, iface->it2);
-             free(iface);
-             pd->interfaces = eina_list_remove_list(pd->interfaces, l);
-          }
+          iface->delete_me = 1;
      }
 }
 
@@ -65,22 +55,24 @@ static void
 _network_update(void *data, Ecore_Thread *thread)
 {
    Ui_Data *pd = data;
-   int n;
+   Eina_List *interfaces = NULL;
+   Network_Interface *iface;
 
    while (!ecore_thread_check(thread))
      {
-        Eina_List *l;
-        Network_Interface *iface, *iface2;
-
+        int n;
         net_iface_t *nwif, **ifaces = system_network_ifaces_get(&n);
 
-       _interface_gone(ifaces, n, pd->interfaces, pd);
+       _interface_gone(ifaces, n, interfaces, pd);
 
         for (int i = 0; i < n; i++)
            {
+             Network_Interface *iface2;
+             Eina_List *l;
+
              nwif = ifaces[i];
              iface = NULL;
-             EINA_LIST_FOREACH(pd->interfaces, l, iface2)
+             EINA_LIST_FOREACH(interfaces, l, iface2)
                {
                   if (!strcmp(nwif->name, iface2->name))
                     {
@@ -93,7 +85,7 @@ _network_update(void *data, Ecore_Thread *thread)
                   iface = calloc(1, sizeof(Network_Interface));
                   iface->is_new = 1;
                   snprintf(iface->name, sizeof(iface->name), "%s", nwif->name);
-                  pd->interfaces = eina_list_append(pd->interfaces, iface);
+                  interfaces = eina_list_append(interfaces, iface);
                }
              else
                {
@@ -113,20 +105,21 @@ _network_update(void *data, Ecore_Thread *thread)
                     iface->peak_out = iface->out;
                   iface->total_in = nwif->xfer.in;
                   iface->total_out = nwif->xfer.out;
-
                }
              free(nwif);
           }
         free(ifaces);
 
-        ecore_thread_feedback(thread, pd->interfaces);
+        ecore_thread_feedback(thread, interfaces);
         for (int i = 0; i < 8; i++)
           {
-             if (pd->skip_wait || ecore_thread_check(thread)) break;
+             if (ecore_thread_check(thread))
+               break;
              usleep(250000);
           }
-        pd->skip_wait = 0;
      }
+   EINA_LIST_FREE(interfaces, iface)
+     free(iface);
 }
 
 static Evas_Object *
@@ -200,40 +193,49 @@ static char *
 _network_transfer_format(double rate)
 {
    const char *unit = "B/s";
+   char buf[256];
 
    if (rate > 1048576)
      {
         rate /= 1048576;
         unit = "MB/s";
      }
-   else if (rate > 1024 && rate < 1048576)
+   else if ((rate > 1024) && (rate < 1048576))
      {
         rate /= 1024;
         unit = "KB/s";
      }
 
-   return strdup(eina_slstr_printf("%.2f %s", rate, unit));
+   snprintf(buf, sizeof(buf), "%.2f %s", rate, unit);
+   return strdup(buf);
 }
 
 static void
 _network_update_feedback_cb(void *data, Ecore_Thread *thread, void *msgdata 
EINA_UNUSED)
 {
+   Eina_List *interfaces;
    Network_Interface *iface;
+   Ui_Data *pd;
    Evas_Object *obj;
-   Elm_Object_Item *it;
-   Eina_List *l;
+   Eina_List *l, *l2;
    char *s;
    Eina_Strbuf *buf;
-   Ui_Data *pd = data;
 
-   EINA_LIST_FREE(pd->purge, it)
-     elm_object_item_del(it);
+   interfaces = msgdata;
+   pd = data;
 
    buf = eina_strbuf_new();
 
-   EINA_LIST_FOREACH(pd->interfaces, l, iface)
+   EINA_LIST_FOREACH_SAFE(interfaces, l, l2, iface)
      {
-        if (iface->is_new)
+        if (iface->delete_me)
+          {
+             elm_object_item_del(iface->it);
+             elm_object_item_del(iface->it2);
+             free(iface);
+             interfaces = eina_list_remove_list(interfaces, l);
+          }
+       else if (iface->is_new)
           {
              iface->it = elm_genlist_item_append(pd->glist, &pd->itc2, 
iface->name, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
             iface->it2 = elm_genlist_item_append(pd->glist, &pd->itc, iface, 
NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
@@ -303,14 +305,10 @@ _win_del_cb(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
 {
    Ui_Data *pd = data;
    Ui *ui = pd->ui;
-   Network_Interface *iface;
 
    evisum_ui_config_save(ui);
    ecore_thread_cancel(pd->thread);
    ecore_thread_wait(pd->thread, 0.5);
-   eina_list_free(pd->purge);
-   EINA_LIST_FREE(pd->interfaces, iface)
-     free(iface);
    ui->network.win = NULL;
    free(pd);
 }

-- 


Reply via email to