[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.