gnunet-svn
[Top][All Lists]
Advanced

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

[libmicrohttpd] 01/02: Added asserts to check correct threads for key fu


From: gnunet
Subject: [libmicrohttpd] 01/02: Added asserts to check correct threads for key functions
Date: Thu, 08 Oct 2020 21:53:44 +0200

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

karlson2k pushed a commit to branch master
in repository libmicrohttpd.

commit 091bf71cb51098586475d44b97bf5e37c4a8824f
Author: Evgeny Grin (Karlson2k) <k2k@narod.ru>
AuthorDate: Thu Oct 8 22:44:33 2020 +0300

    Added asserts to check correct threads for key functions
---
 src/microhttpd/connection.c  | 13 ++++++++++++-
 src/microhttpd/daemon.c      | 40 ++++++++++++++++++++++++++++++++++++++--
 src/microhttpd/mhd_threads.h |  5 +++--
 src/microhttpd/response.c    |  3 +++
 4 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 2d9dd9a9..7fd52739 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -687,6 +687,9 @@ MHD_connection_close_ (struct MHD_Connection *connection,
   struct MHD_Daemon *daemon = connection->daemon;
   struct MHD_Response *resp = connection->response;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (connection->pid) );
+
   MHD_connection_mark_closed_ (connection);
   if (NULL != resp)
   {
@@ -720,6 +723,10 @@ MHD_connection_finish_forward_ (struct MHD_Connection 
*connection)
   struct MHD_Daemon *daemon = connection->daemon;
   struct MHD_UpgradeResponseHandle *urh = connection->urh;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   if (0 == (daemon->options & MHD_USE_TLS))
     return; /* Nothing to do with non-TLS connection. */
 
@@ -3158,6 +3165,8 @@ static void
 cleanup_connection (struct MHD_Connection *connection)
 {
   struct MHD_Daemon *daemon = connection->daemon;
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (connection->pid) );
 
   if (connection->in_cleanup)
     return; /* Prevent double cleanup. */
@@ -3237,6 +3246,8 @@ MHD_connection_handle_idle (struct MHD_Connection 
*connection)
   char *line;
   size_t line_len;
   enum MHD_Result ret;
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (connection->pid) );
 
   connection->in_idle = true;
   while (! connection->suspended)
@@ -3933,7 +3944,7 @@ MHD_queue_response (struct MHD_Connection *connection,
 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
   if ( (! connection->suspended) &&
        (0 != (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) &&
-       (! MHD_thread_ID_match_current_ (connection->pid.ID)) )
+       (! MHD_thread_ID_match_current_ (connection->pid)) )
   {
 #ifdef HAVE_MESSAGES
     MHD_DLOG (daemon,
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 48434112..480c37cd 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -1336,6 +1336,8 @@ process_urh (struct MHD_UpgradeResponseHandle *urh)
    * of processing - it will be processed on next iteration. */
   bool was_closed;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (connection->pid) );
   if (daemon->shutdown)
   {
     /* Daemon shutting down, application will not receive any more data. */
@@ -1687,6 +1689,8 @@ thread_main_connection_upgrade (struct MHD_Connection 
*con)
   struct MHD_UpgradeResponseHandle *urh = con->urh;
   struct MHD_Daemon *daemon = con->daemon;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (con->pid) );
   /* Here, we need to bi-directionally forward
      until the application tells us that it is done
      with the socket; */
@@ -2818,6 +2822,10 @@ internal_suspend_connection_ (struct MHD_Connection 
*connection)
 {
   struct MHD_Daemon *daemon = connection->daemon;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
   MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
 #endif
@@ -2913,6 +2921,10 @@ MHD_suspend_connection (struct MHD_Connection 
*connection)
 {
   struct MHD_Daemon *const daemon = connection->daemon;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   if (0 == (daemon->options & MHD_TEST_ALLOW_SUSPEND_RESUME))
     MHD_PANIC (_ (
                  "Cannot suspend connections without enabling 
MHD_ALLOW_SUSPEND_RESUME!\n"));
@@ -2991,6 +3003,9 @@ resume_suspended_connections (struct MHD_Daemon *daemon)
 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
   MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
 #endif
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   if (daemon->resuming)
   {
     prev = daemon->suspended_connections_tail;
@@ -3206,6 +3221,9 @@ MHD_accept_connection (struct MHD_Daemon *daemon)
   MHD_socket fd;
   bool sk_nonbl;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   addrlen = sizeof (addrstorage);
   memset (addr,
           0,
@@ -3346,6 +3364,8 @@ static void
 MHD_cleanup_connections (struct MHD_Daemon *daemon)
 {
   struct MHD_Connection *pos;
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
 
 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
   MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
@@ -3460,6 +3480,9 @@ MHD_get_timeout (struct MHD_Daemon *daemon,
   struct MHD_Connection *pos;
   bool have_timeout;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
   {
 #ifdef HAVE_MESSAGES
@@ -4254,6 +4277,9 @@ run_epoll_for_upgrade (struct MHD_Daemon *daemon)
   struct MHD_UpgradeResponseHandle *pos;
   struct MHD_UpgradeResponseHandle *prev;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   num_events = MAX_EVENTS;
   while (0 != num_events)
   {
@@ -4733,6 +4759,9 @@ close_connection (struct MHD_Connection *pos)
 {
   struct MHD_Daemon *daemon = pos->daemon;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
   if (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION))
   {
     MHD_connection_mark_closed_ (pos);
@@ -5628,8 +5657,7 @@ setup_epoll_fd (struct MHD_Daemon *daemon)
 /**
  * Setup epoll() FD for the daemon and initialize it to listen
  * on the listen FD.
- * @remark To be called only from thread that process
- * daemon's select()/poll()/etc.
+ * @remark To be called only from MHD_start_daemon_va()
  *
  * @param daemon daemon to initialize for epoll()
  * @return #MHD_YES on success, #MHD_NO on failure
@@ -6693,6 +6721,10 @@ close_all_connections (struct MHD_Daemon *daemon)
   struct MHD_UpgradeResponseHandle *urhn;
   const bool used_tls = (0 != (daemon->options & MHD_USE_TLS));
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) || \
+               MHD_thread_ID_match_current_ (daemon->pid) );
+
 #if defined(MHD_USE_POSIX_THREADS) || defined(MHD_USE_W32_THREADS)
   mhd_assert (NULL == daemon->worker_pool);
 #endif
@@ -6850,6 +6882,10 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
 
   if (NULL == daemon)
     return;
+  if ( (daemon->shutdown) && (NULL == daemon->master) )
+    MHD_PANIC (_ ("MHD_stop_daemon() was called twice."));
+  /* Slave daemons must be stopped by master daemon. */
+  mhd_assert ( (NULL == daemon->master) || (daemon->shutdown) );
 
   daemon->shutdown = true;
   if (daemon->was_quiesced)
diff --git a/src/microhttpd/mhd_threads.h b/src/microhttpd/mhd_threads.h
index ee2f6020..6f690893 100644
--- a/src/microhttpd/mhd_threads.h
+++ b/src/microhttpd/mhd_threads.h
@@ -154,14 +154,15 @@ typedef struct _MHD_thread_handle_ID_ 
MHD_thread_handle_ID_;
  * @param ID thread ID to match
  * @return nonzero on match, zero otherwise
  */
-#define MHD_thread_ID_match_current_(ID) (pthread_equal ((ID), pthread_self 
()))
+#define MHD_thread_ID_match_current_(pid) \
+          (pthread_equal ((pid).ID, pthread_self ()))
 #elif defined(MHD_USE_W32_THREADS)
 /**
  * Check whether provided thread ID match current thread.
  * @param ID thread ID to match
  * @return nonzero on match, zero otherwise
  */
-#define MHD_thread_ID_match_current_(ID) (GetCurrentThreadId () == (ID))
+#define MHD_thread_ID_match_current_(pid) (GetCurrentThreadId () == (pid).ID)
 #endif
 
 #if defined(MHD_USE_POSIX_THREADS)
diff --git a/src/microhttpd/response.c b/src/microhttpd/response.c
index 27386046..dc04cab5 100644
--- a/src/microhttpd/response.c
+++ b/src/microhttpd/response.c
@@ -969,6 +969,9 @@ MHD_response_execute_upgrade_ (struct MHD_Response 
*response,
   struct MHD_UpgradeResponseHandle *urh;
   size_t rbo;
 
+  mhd_assert ( (0 == (daemon->options & MHD_USE_INTERNAL_POLLING_THREAD)) || \
+               MHD_thread_ID_match_current_ (connection->pid) );
+
   if (0 == (daemon->options & MHD_ALLOW_UPGRADE))
     return MHD_NO;
 

-- 
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]