gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r30862 - in libmicrohttpd: . src/microhttpd
Date: Mon, 25 Nov 2013 22:51:08 +0100

Author: grothoff
Date: 2013-11-25 22:51:08 +0100 (Mon, 25 Nov 2013)
New Revision: 30862

Modified:
   libmicrohttpd/AUTHORS
   libmicrohttpd/ChangeLog
   libmicrohttpd/configure.ac
   libmicrohttpd/src/microhttpd/connection.c
   libmicrohttpd/src/microhttpd/daemon.c
   libmicrohttpd/src/microhttpd/internal.h
Log:
-fixes to MHD_suspend_connection

Modified: libmicrohttpd/AUTHORS
===================================================================
--- libmicrohttpd/AUTHORS       2013-11-25 15:46:51 UTC (rev 30861)
+++ libmicrohttpd/AUTHORS       2013-11-25 21:51:08 UTC (rev 30862)
@@ -44,6 +44,7 @@
 Jan Janak <address@hidden>
 Matthew Mundell <address@hidden>
 Scott Goldman <address@hidden>
+Jared Cantwell
 
 Documentation contributions also came from:
 Marco Maggi <address@hidden>

Modified: libmicrohttpd/ChangeLog
===================================================================
--- libmicrohttpd/ChangeLog     2013-11-25 15:46:51 UTC (rev 30861)
+++ libmicrohttpd/ChangeLog     2013-11-25 21:51:08 UTC (rev 30862)
@@ -1,3 +1,8 @@
+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.
+       Fix definition of MHD_TLS_CONNECTION_INIT.  -MH/JC
+
 Wed Oct 30 09:34:20 CET 2013
        Fixing issue in PostProcessor when getting partial boundary
        at the beginning, expanding test suite. -CG

Modified: libmicrohttpd/configure.ac
===================================================================
--- libmicrohttpd/configure.ac  2013-11-25 15:46:51 UTC (rev 30861)
+++ libmicrohttpd/configure.ac  2013-11-25 21:51:08 UTC (rev 30862)
@@ -22,7 +22,7 @@
 #
 AC_PREREQ(2.57)
 AC_INIT([libmicrohttpd], [0.9.31],address@hidden)
-AM_INIT_AUTOMAKE([silent-rules serial-tests])
+AM_INIT_AUTOMAKE([silent-rules])
 AC_CONFIG_HEADERS([MHD_config.h])
 AC_CONFIG_MACRO_DIR([m4])
 AH_TOP([#define _GNU_SOURCE  1])

Modified: libmicrohttpd/src/microhttpd/connection.c
===================================================================
--- libmicrohttpd/src/microhttpd/connection.c   2013-11-25 15:46:51 UTC (rev 
30861)
+++ libmicrohttpd/src/microhttpd/connection.c   2013-11-25 21:51:08 UTC (rev 
30862)
@@ -2474,6 +2474,7 @@
     {
     case MHD_EVENT_LOOP_INFO_READ:
       if ( (0 != (connection->epoll_state & MHD_EPOLL_STATE_READ_READY)) &&
+           (0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED)) &&
           (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) )
        {
          EDLL_insert (daemon->eready_head,
@@ -2485,6 +2486,7 @@
     case MHD_EVENT_LOOP_INFO_WRITE:
       if ( (connection->read_buffer_size > connection->read_buffer_offset) &&
           (0 != (connection->epoll_state & MHD_EPOLL_STATE_READ_READY)) &&
+           (0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED)) &&
           (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) )
        {
          EDLL_insert (daemon->eready_head,
@@ -2493,6 +2495,7 @@
          connection->epoll_state |= MHD_EPOLL_STATE_IN_EREADY_EDLL;
        }
       if ( (0 != (connection->epoll_state & MHD_EPOLL_STATE_WRITE_READY)) &&
+           (0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED)) &&
           (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL)) )
        {
          EDLL_insert (daemon->eready_head,
@@ -2504,7 +2507,8 @@
     case MHD_EVENT_LOOP_INFO_BLOCK:
       /* we should look at this connection again in the next iteration
         of the event loop, as we're waiting on the application */
-      if (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
+      if ( (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL) &&
+           (0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED))) )
        {
          EDLL_insert (daemon->eready_head,
                       daemon->eready_tail,
@@ -2539,6 +2543,7 @@
 
   if ( (0 != (daemon->options & MHD_USE_EPOLL_LINUX_ONLY)) &&
        (0 == (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET)) &&
+       (0 == (connection->epoll_state & MHD_EPOLL_STATE_SUSPENDED)) &&
        ( (0 == (connection->epoll_state & MHD_EPOLL_STATE_WRITE_READY)) ||
         ( (0 == (connection->epoll_state & MHD_EPOLL_STATE_READ_READY)) &&
           ( (MHD_EVENT_LOOP_INFO_READ == connection->event_loop_info) ||

Modified: libmicrohttpd/src/microhttpd/daemon.c
===================================================================
--- libmicrohttpd/src/microhttpd/daemon.c       2013-11-25 15:46:51 UTC (rev 
30861)
+++ libmicrohttpd/src/microhttpd/daemon.c       2013-11-25 21:51:08 UTC (rev 
30862)
@@ -1398,6 +1398,9 @@
   daemon = connection->daemon;
   if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
     MHD_PANIC ("Cannot suspend connections in THREAD_PER_CONNECTION mode!\n");
+  if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
+       (0 != pthread_mutex_lock (&daemon->cleanup_connection_mutex)) )
+    MHD_PANIC ("Failed to acquire cleanup mutex\n");
   DLL_remove (daemon->connections_head,
               daemon->connections_tail,
               connection);
@@ -1410,22 +1413,29 @@
                  daemon->manual_timeout_tail,
                  connection);
 #if EPOLL_SUPPORT
-  if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
-    {
-      EDLL_remove (daemon->eready_head,
-                   daemon->eready_tail,
-                   connection);
-    }
-  if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET))
-    {
-      if (0 != epoll_ctl (daemon->epoll_fd,
-                          EPOLL_CTL_DEL,
-                          connection->socket_fd,
-                          NULL))
-        MHD_PANIC ("Failed to remove FD from epoll set\n");
-      connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET;
-    }
+  if (0 != (daemon->options & MHD_USE_EPOLL_LINUX_ONLY))
+  {
+    if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
+      {
+        EDLL_remove (daemon->eready_head,
+                     daemon->eready_tail,
+                     connection);
+      }
+    if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EPOLL_SET))
+      {
+        if (0 != epoll_ctl (daemon->epoll_fd,
+                            EPOLL_CTL_DEL,
+                            connection->socket_fd,
+                            NULL))
+          MHD_PANIC ("Failed to remove FD from epoll set\n");
+        connection->epoll_state &= ~MHD_EPOLL_STATE_IN_EPOLL_SET;
+      }
+    connection->epoll_state |= MHD_EPOLL_STATE_SUSPENDED;
+  }
 #endif
+  if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
+       (0 != pthread_mutex_unlock (&daemon->cleanup_connection_mutex)) )
+    MHD_PANIC ("Failed to release cleanup mutex\n");
 }
 
 
@@ -1460,33 +1470,30 @@
                  daemon->manual_timeout_tail,
                  connection);
 #if EPOLL_SUPPORT
-  if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
-    {
-      EDLL_insert (daemon->eready_head,
-                   daemon->eready_tail,
-                   connection);
-    }
-  else
-    {
-      struct epoll_event event;
+  if (0 != (daemon->options & MHD_USE_EPOLL_LINUX_ONLY))
+  {
+    if (0 != (connection->epoll_state & MHD_EPOLL_STATE_IN_EREADY_EDLL))
+      {
+        EDLL_insert (daemon->eready_head,
+                     daemon->eready_tail,
+                     connection);
+      }
+    else
+      {
+        struct epoll_event event;
 
-      event.events = EPOLLIN | EPOLLOUT | EPOLLET;
-      event.data.ptr = connection;
-      if (0 != epoll_ctl (daemon->epoll_fd,
-                          EPOLL_CTL_ADD,
-                          connection->socket_fd,
-                          &event))
-        {
-#if HAVE_MESSAGES
-          MHD_DLOG (daemon,
-                    "Call to epoll_ctl failed: %s\n",
-                    STRERROR (errno));
-#endif
-          /* and now, good luck with this... */
-        }
-      else
-        connection->epoll_state |= MHD_EPOLL_STATE_IN_EPOLL_SET;
+        event.events = EPOLLIN | EPOLLOUT | EPOLLET;
+        event.data.ptr = connection;
+        if (0 != epoll_ctl (daemon->epoll_fd,
+                            EPOLL_CTL_ADD,
+                            connection->socket_fd,
+                            &event))
+          MHD_PANIC ("Failed to add FD to epoll set\n");
+        else
+          connection->epoll_state |= MHD_EPOLL_STATE_IN_EPOLL_SET;
     }
+    connection->epoll_state &= ~MHD_EPOLL_STATE_SUSPENDED;
+  }
 #endif
   if ( (-1 != daemon->wpipe[1]) &&
        (1 != WRITE (daemon->wpipe[1], "n", 1)) )

Modified: libmicrohttpd/src/microhttpd/internal.h
===================================================================
--- libmicrohttpd/src/microhttpd/internal.h     2013-11-25 15:46:51 UTC (rev 
30861)
+++ libmicrohttpd/src/microhttpd/internal.h     2013-11-25 21:51:08 UTC (rev 
30862)
@@ -116,8 +116,12 @@
     /**
      * Is this connection currently in the 'epoll' set?
      */
-    MHD_EPOLL_STATE_IN_EPOLL_SET = 8
+    MHD_EPOLL_STATE_IN_EPOLL_SET = 8,
 
+    /**
+     * Is this connection currently suspended?
+     */
+    MHD_EPOLL_STATE_SUSPENDED = 16
   };
 
 
@@ -452,7 +456,7 @@
    * Handshake messages will be processed in this state & while
    * in the 'MHD_TLS_HELLO_REQUEST' state
    */
-  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_CLOSED + 1
+  MHD_TLS_CONNECTION_INIT = MHD_CONNECTION_IN_CLEANUP + 1
 
 };
 




reply via email to

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