gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] [libmicrohttpd] branch master updated: mhd_shutdown_socket_


From: gnunet
Subject: [GNUnet-SVN] [libmicrohttpd] branch master updated: mhd_shutdown_socket_trigger.m4: used more reliable method if gettimeofday() is not available. Fixed interpretation of very short time periods.
Date: Tue, 21 Mar 2017 22:12:29 +0100

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

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

The following commit(s) were added to refs/heads/master by this push:
     new 9b2ca1e6 mhd_shutdown_socket_trigger.m4: used more reliable method if 
gettimeofday() is not available. Fixed interpretation of very short time 
periods.
9b2ca1e6 is described below

commit 9b2ca1e6e535e6da836b59f4c0b1ccc5001c74e1
Author: Evgeny Grin (Karlson2k) <address@hidden>
AuthorDate: Wed Mar 22 00:06:41 2017 +0300

    mhd_shutdown_socket_trigger.m4: used more reliable method if gettimeofday() 
is not available.
    Fixed interpretation of very short time periods.
---
 m4/mhd_shutdown_socket_trigger.m4 | 108 ++++++++++++++++++++++++++------------
 1 file changed, 74 insertions(+), 34 deletions(-)

diff --git a/m4/mhd_shutdown_socket_trigger.m4 
b/m4/mhd_shutdown_socket_trigger.m4
index d6dfd77a..a0a0acf1 100644
--- a/m4/mhd_shutdown_socket_trigger.m4
+++ b/m4/mhd_shutdown_socket_trigger.m4
@@ -18,7 +18,7 @@
 #   and this notice are preserved. This file is offered as-is, without any
 #   warranty.
 
-#serial 1
+#serial 2
 
 AC_DEFUN([MHD_CHECK_SOCKET_SHUTDOWN_TRIGGER],[dnl
   AC_PREREQ([2.64])dnl
@@ -141,11 +141,12 @@ AC_DEFUN([_MHD_RUN_CHECK_SOCKET_SHUTDOWN_TRIGGER],[dnl
 #  endif
 #endif
 
+
 #ifdef HAVE_NANOSLEEP
-static const struct timespec sm_tmout = {0, 100000};
+static const struct timespec sm_tmout = {0, 1000};
 #  define short_sleep() nanosleep(&sm_tmout, NULL)
-#elif HAVE_USLEEP
-#  define short_sleep() usleep(100)
+#elif defined(HAVE_USLEEP)
+#  define short_sleep() usleep(1)
 #else
 #  define short_sleep() (void)0
 #endif
@@ -155,8 +156,24 @@ static volatile int select_ends = 0;
 static volatile int gerror = 0;
 static int timeout_mils;
 
+#ifndef HAVE_GETTIMEOFDAY
+static volatile long long select_elapsed_time = 0;
+
+static long long time_chk(void)
+{
+  long long ret = time(NULL);
+  if (-1 == ret)
+    gerror = 4;
+  return ret;
+}
+#endif
+
+
 static void* select_thrd_func(void* param)
 {
+#ifndef HAVE_GETTIMEOFDAY
+  long long start, stop;
+#endif
   fd_set rs;
   struct timeval tmot = {0, 0};
   MHD_socket fd = *((MHD_socket*)param);
@@ -164,18 +181,23 @@ static void* select_thrd_func(void* param)
   FD_ZERO(&rs);
   FD_SET(fd, &rs);
   tmot.tv_usec = timeout_mils * 1000;
+#ifndef HAVE_GETTIMEOFDAY
+  start = time_chk();
+#endif
   going_select = 1;
   if (0 > select ((int)(fd) + 1, &rs, NULL, NULL, &tmot))
-    gerror = 1;
+    gerror = 5;
+#ifndef HAVE_GETTIMEOFDAY
+  stop = time_chk();
+  select_elapsed_time = stop - start;
+#endif
   select_ends = 1;
   return NULL;
 }
 
 
 static MHD_socket create_socket(void)
-{
-  return socket (AF_INET, SOCK_STREAM, 0);
-}
+{ return socket (AF_INET, SOCK_STREAM, 0); }
 
 static void close_socket(MHD_socket fd)
 {
@@ -222,71 +244,89 @@ static long long test_run_select(int timeout_millsec, int 
use_shutdown, long lon
 #ifdef HAVE_GETTIMEOFDAY
   struct timeval start, stop;
 #else
-  clock_t start, stop;
-  if (-1 == clock())
-    return 0;
+  long long start;
 #endif
 
   fd = create_socket_listen(0);
   if (MHD_INVALID_SOCKET == fd)
-    return 0;
+    return -7;
   going_select = 0;
   select_ends = 0;
   gerror = 0;
   timeout_mils = timeout_millsec;
   if (0 != pthread_create (&select_thrd, NULL, select_thrd_func, (void*)&fd))
-    return 0;
-#ifdef HAVE_GETTIMEOFDAY
+    return -8;
   while (!going_select) {short_sleep();}
+#ifdef HAVE_GETTIMEOFDAY
   gettimeofday (&start, NULL);
 #else
-  while (!going_select)
-  { start = clock(); short_sleep(); }
+  start = time_chk();
 #endif
   if (use_shutdown)
     {
 #ifdef HAVE_GETTIMEOFDAY
       struct timeval current;
-      do {gettimeofday(&current, NULL); short_sleep();} while 
(delay_before_shutdown > diff_time(current, start));
+      do {short_sleep(); gettimeofday(&current, NULL); } while 
(delay_before_shutdown > diff_time(current, start));
 #else
-      while (delay_before_shutdown > clock() - start) {short_sleep();}
+      while (delay_before_shutdown > time_chk() - start) {short_sleep();}
 #endif
       shutdown(fd, SHUT_RDWR);
     }
 #ifdef HAVE_GETTIMEOFDAY
   while (!select_ends) {short_sleep();}
   gettimeofday (&stop, NULL);
-#else
-  while (!select_ends)
-  { stop = clock(); short_sleep();}
 #endif
   if (0 != pthread_join(select_thrd, NULL))
-    return 0;
+    return -9;
   close_socket(fd);
   if (gerror)
-    return 0;
+    return -10;
+#ifdef HAVE_GETTIMEOFDAY
   return (long long)diff_time(stop, start);
+#else
+  return select_elapsed_time;
+#endif
 }
 
 static int test_it(void)
 {
-  clock_t duration1, duration2;
+  long long duration2;
+#ifdef HAVE_GETTIMEOFDAY
+  long long duration0, duration1;
+  duration0 = test_run_select(0, 0, 0);
+  if (0 > duration0)
+    return -duration0;
+
   duration1 = test_run_select(50, 0, 0);
-  if (0 == duration1)
-    return 16;
+  if (0 > duration1)
+    return -duration1 + 20;
 
-  duration2 = test_run_select(500, 1, duration1 / 2);
-  if (0 == duration2)
-    return 18;
+  duration2 = test_run_select(500, 1, (duration0 + duration1) / 2);
+  if (0 > duration2)
+    return -duration2 + 40;
 
   if (duration1 * 2 > duration2)
     { /* Check second time to be sure. */
-      duration2 = test_run_select(500, 1, duration1 / 2);
-      if (0 == duration2)
-        return 20;
+      duration2 = test_run_select(500, 1, (duration0 + duration1) / 2);
+      if (0 > duration2)
+        return -duration2 + 60;
       if (duration1 * 2 > duration2)
         return 0;
     }
+#else
+  duration2 = test_run_select(5000, 1, 2);
+  if (0 > duration2)
+    return -duration2 + 80;
+
+  if (4 > duration2)
+    { /* Check second time to be sure. */
+      duration2 = test_run_select(5000, 1, 2);
+      if (0 > duration2)
+      return -duration2 + 100;
+      if (4 > duration2)
+        return 0;
+    }
+#endif
   return 1;
 }
 
@@ -316,13 +356,13 @@ int main(void)
 {
   int res;
   if (!init())
-    return 10;
+    return 19;
 
   res = test_it();
 
   cleanup();
   if (gerror)
-    return 40;
+    return gerror;
 
   return res;
 }

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



reply via email to

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