gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-twister] branch master updated: Undo 9dc679300003ee9


From: gnunet
Subject: [GNUnet-SVN] [taler-twister] branch master updated: Undo 9dc679300003ee9..
Date: Tue, 05 Jun 2018 10:48:04 +0200

This is an automated email from the git hooks/post-receive script.

marcello pushed a commit to branch master
in repository twister.

The following commit(s) were added to refs/heads/master by this push:
     new 15ea1c1  Undo 9dc679300003ee9..
15ea1c1 is described below

commit 15ea1c1ddbbcdf2b780c612bb49edbc8ccc42dcb
Author: Marcello Stanisci <address@hidden>
AuthorDate: Tue Jun 5 10:39:36 2018 +0200

    Undo 9dc679300003ee9..
    
    It is never good to make the Twister block using
    a function that does not belong to the GNUnet
    scheduler.
    
    This way, the scheduler would ignore all signals
    and requests from Twister clients, and possibly
    behave unexpectedly in other contexts.
---
 src/twister/taler-twister-service.c | 78 +++++++++++++++++++++++++++++++------
 1 file changed, 67 insertions(+), 11 deletions(-)

diff --git a/src/twister/taler-twister-service.c 
b/src/twister/taler-twister-service.c
index 065e527..1efbabc 100644
--- a/src/twister/taler-twister-service.c
+++ b/src/twister/taler-twister-service.c
@@ -561,20 +561,76 @@ curl_task_download (void *cls);
 static void
 curl_download_prepare ()
 {
-  int numfds;
-
-  curl_multi_wait (curl_multi,
-                   NULL,
-                   0,
-                   1000, // millisecs.
-                   &numfds);
+  CURLMcode mret;
+  fd_set rs;
+  fd_set ws;
+  fd_set es;
+  int max;
+  struct GNUNET_NETWORK_FDSet *grs;
+  struct GNUNET_NETWORK_FDSet *gws;
+  long to;
+  struct GNUNET_TIME_Relative rtime;
 
-  curl_download_task = GNUNET_SCHEDULER_add_now
-     (&curl_task_download,
-      curl_multi);
+  if (NULL != curl_download_task)
+  {
+    GNUNET_SCHEDULER_cancel (curl_download_task);
+    curl_download_task = NULL;
+  }
+  max = -1;
+  FD_ZERO (&rs);
+  FD_ZERO (&ws);
+  FD_ZERO (&es);
+  if (CURLM_OK != (mret = curl_multi_fdset (curl_multi,
+                                           &rs,
+                                           &ws,
+                                           &es,
+                                           &max)))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "%s failed at %s:%d: `%s'\n",
+                "curl_multi_fdset",
+               __FILE__,
+               __LINE__,
+                curl_multi_strerror (mret));
+    return;
+  }
+  to = -1;
+  GNUNET_break (CURLM_OK ==
+               curl_multi_timeout (curl_multi,
+                                   &to));
+  if (-1 == to)
+    rtime = GNUNET_TIME_UNIT_FOREVER_REL;
+  else
+    rtime = GNUNET_TIME_relative_multiply
+      (GNUNET_TIME_UNIT_MILLISECONDS, to);
+  if (-1 != max)
+  {
+    grs = GNUNET_NETWORK_fdset_create ();
+    gws = GNUNET_NETWORK_fdset_create ();
+    GNUNET_NETWORK_fdset_copy_native (grs,
+                                     &rs,
+                                     max + 1);
+    GNUNET_NETWORK_fdset_copy_native (gws,
+                                     &ws,
+                                     max + 1);
+    curl_download_task = GNUNET_SCHEDULER_add_select
+      (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
+       rtime,
+       grs, gws,
+       &curl_task_download,
+       curl_multi);
+    GNUNET_NETWORK_fdset_destroy (gws);
+    GNUNET_NETWORK_fdset_destroy (grs);
+  }
+  else
+  {
+    curl_download_task = GNUNET_SCHEDULER_add_delayed
+      (rtime,
+       &curl_task_download,
+       curl_multi);
+  }
 }
 
-
 /**
  * Task that is run when we are ready to receive
  * more data from curl.

-- 
To stop receiving notification emails like this one, please contact
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]