gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r30864 - in libmicrohttpd: . src/microhttpd


From: gnunet
Subject: [GNUnet-SVN] r30864 - in libmicrohttpd: . src/microhttpd
Date: Tue, 26 Nov 2013 01:28:14 +0100

Author: grothoff
Date: 2013-11-26 01:28:14 +0100 (Tue, 26 Nov 2013)
New Revision: 30864

Modified:
   libmicrohttpd/ChangeLog
   libmicrohttpd/src/microhttpd/daemon.c
Log:
-fix shutdown race for wpipe on non-Linux systems

Modified: libmicrohttpd/ChangeLog
===================================================================
--- libmicrohttpd/ChangeLog     2013-11-25 22:31:22 UTC (rev 30863)
+++ libmicrohttpd/ChangeLog     2013-11-26 00:28:14 UTC (rev 30864)
@@ -1,3 +1,7 @@
+Tue Nov 26 01:26:15 CET 2013
+       Fix race on shutdown signal with thread pool on non-Linux
+       systems by signalling n times for n threads. -CG
+
 Sun Nov 24 13:41:15 CET 2013
        Introduce state to mark connections in suspended state (with
        epoll); add missing locking operations in MHD_suspend_connection.

Modified: libmicrohttpd/src/microhttpd/daemon.c
===================================================================
--- libmicrohttpd/src/microhttpd/daemon.c       2013-11-25 22:31:22 UTC (rev 
30863)
+++ libmicrohttpd/src/microhttpd/daemon.c       2013-11-26 00:28:14 UTC (rev 
30864)
@@ -1894,7 +1894,7 @@
                     const fd_set *except_fd_set)
 {
   int ds;
-  int tmp;
+  char tmp;
   struct MHD_Connection *pos;
   struct MHD_Connection *next;
 
@@ -3812,7 +3812,7 @@
   if (-1 != daemon->wpipe[1])
     {
       if (1 != WRITE (daemon->wpipe[1], "e", 1))
-       MHD_PANIC ("failed to signal shutdownn via pipe");
+       MHD_PANIC ("failed to signal shutdown via pipe");
     }
 #ifdef HAVE_LISTEN_SHUTDOWN
   else
@@ -3842,6 +3842,11 @@
       /* MHD_USE_NO_LISTEN_SOCKET disables thread pools, hence we need to 
check */
       for (i = 0; i < daemon->worker_pool_size; ++i)
        {
+         if (-1 != daemon->wpipe[1])
+           {
+             if (1 != WRITE (daemon->wpipe[1], "e", 1))
+               MHD_PANIC ("failed to signal shutdown via pipe");
+           }
          if (0 != (rc = pthread_join (daemon->worker_pool[i].pid, &unused)))
              MHD_PANIC ("Failed to join a thread\n");
          close_all_connections (&daemon->worker_pool[i]);




reply via email to

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