gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 01/02: add missing lock, do not call 'close(-1)' on very


From: gnunet
Subject: [libmicrohttpd] 01/02: add missing lock, do not call 'close(-1)' on very rare error path
Date: Sun, 21 Jan 2024 11:18:40 +0100

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

grothoff pushed a commit to branch master
in repository libmicrohttpd.

commit 0d85d57380829af3abf9f8b982a60e5b0c918155
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Jan 21 10:18:21 2024 +0100

    add missing lock, do not call 'close(-1)' on very rare error path
---
 src/microhttpd/daemon.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index b433bff4..4ad9e458 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -7472,7 +7472,7 @@ setup_epoll_to_listen (struct MHD_Daemon *daemon)
  *                        if provided by application
  * @param[out] psockaddr_len the size memory area pointed by 'struct sockaddr'
  *                           if provided by application
- * @param[in] params the interim parameters to process
+ * @param[in,out] params the interim parameters to process
  * @return true in case of success,
  *         false in case of critical error (the daemon must be closed).
  */
@@ -7596,7 +7596,11 @@ process_interim_params (struct MHD_Daemon *d,
                    "specified for daemon with MHD_USE_NO_LISTEN_SOCKET " \
                    "flag set.\n"));
 #endif /* HAVE_MESSAGES */
-      (void) MHD_socket_close_ (params->listen_fd);
+      if (MHD_INVALID_SOCKET != d->listen_fd)
+      {
+        (void) MHD_socket_close_ (params->listen_fd);
+        params->listen_fd = MHD_INVALID_SOCKET;
+      }
       return false;
     }
     else
@@ -8301,11 +8305,11 @@ MHD_start_daemon_va (unsigned int flags,
 #endif
       }
 #endif /* ! MHD_WINSOCK_SOCKETS */
-      /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
-       * Fail if SO_REUSEPORT is not defined or setsockopt fails.
-       */
-      /* SO_REUSEADDR on W32 has the same semantics
-         as SO_REUSEPORT on BSD/Linux */
+       /* Use SO_REUSEADDR on Windows and SO_REUSEPORT on most platforms.
+        * Fail if SO_REUSEPORT is not defined or setsockopt fails.
+        */
+       /* SO_REUSEADDR on W32 has the same semantics
+          as SO_REUSEPORT on BSD/Linux */
 #if defined(MHD_WINSOCK_SOCKETS) || defined(SO_REUSEPORT)
       if (0 > setsockopt (listen_fd,
                           SOL_SOCKET,
@@ -8325,8 +8329,8 @@ MHD_start_daemon_va (unsigned int flags,
         goto free_and_fail;
       }
 #else  /* !MHD_WINSOCK_SOCKETS && !SO_REUSEPORT */
-      /* we're supposed to allow address:port re-use, but
-         on this platform we cannot; fail hard */
+       /* we're supposed to allow address:port re-use, but
+          on this platform we cannot; fail hard */
 #ifdef HAVE_MESSAGES
       MHD_DLOG (daemon,
                 _ ("Cannot allow listening address reuse: " \
@@ -9054,6 +9058,7 @@ close_all_connections (struct MHD_Daemon *daemon)
 #ifdef MHD_USE_THREADS
 /* Remove externally added new connections that are
    * not processed by the daemon thread. */
+  MHD_mutex_lock_chk_ (&daemon->new_connections_mutex);
   while (NULL != (pos = daemon->new_connections_tail))
   {
     mhd_assert (MHD_D_IS_USING_THREADS_ (daemon));
@@ -9062,6 +9067,7 @@ close_all_connections (struct MHD_Daemon *daemon)
                 pos);
     new_connection_close_ (daemon, pos);
   }
+  MHD_mutex_unlock_chk_ (&daemon->new_connections_mutex);
 #endif /* MHD_USE_THREADS */
 
 #if defined(HTTPS_SUPPORT) && defined(UPGRADE_SUPPORT)

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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