[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [libmicrohttpd] 01/03: mhd_threads: added thread ID support
From: |
gnunet |
Subject: |
[GNUnet-SVN] [libmicrohttpd] 01/03: mhd_threads: added thread ID support |
Date: |
Sun, 27 Aug 2017 20:46:56 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd.
commit 4fc783ecbd230c5c8e8ed0de1818b252070ef979
Author: Evgeny Grin (Karlson2k) <address@hidden>
AuthorDate: Sun Aug 27 20:33:34 2017 +0300
mhd_threads: added thread ID support
---
src/microhttpd/daemon.c | 8 ++++----
src/microhttpd/internal.h | 4 ++--
src/microhttpd/mhd_threads.c | 28 ++++++++++++----------------
src/microhttpd/mhd_threads.h | 26 ++++++++++++++++++++++++--
4 files changed, 42 insertions(+), 24 deletions(-)
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
index 88dabed5..2f8945c1 100644
--- a/src/microhttpd/daemon.c
+++ b/src/microhttpd/daemon.c
@@ -2962,7 +2962,7 @@ MHD_cleanup_connections (struct MHD_Daemon *daemon)
if ( (0 != (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) &&
(! pos->thread_joined) &&
- (! MHD_join_thread_ (pos->pid)) )
+ (! MHD_join_thread_ (pos->pid.handle)) )
MHD_PANIC (_("Failed to join a thread\n"));
#ifdef UPGRADE_SUPPORT
cleanup_upgraded_connection (pos);
@@ -6131,7 +6131,7 @@ close_all_connections (struct MHD_Daemon *daemon)
if (! pos->thread_joined)
{
MHD_mutex_unlock_chk_ (&daemon->cleanup_connection_mutex);
- if (! MHD_join_thread_ (pos->pid))
+ if (! MHD_join_thread_ (pos->pid.handle))
MHD_PANIC (_("Failed to join a thread\n"));
MHD_mutex_lock_chk_ (&daemon->cleanup_connection_mutex);
pos->thread_joined = true;
@@ -6218,7 +6218,7 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
/* Start harvesting. */
for (i = 0; i < daemon->worker_pool_size; ++i)
{
- if (! MHD_join_thread_ (daemon->worker_pool[i].pid))
+ if (! MHD_join_thread_ (daemon->worker_pool[i].pid.handle))
MHD_PANIC (_("Failed to join a thread\n"));
#ifdef EPOLL_SUPPORT
if (-1 != daemon->worker_pool[i].epoll_fd)
@@ -6252,7 +6252,7 @@ MHD_stop_daemon (struct MHD_Daemon *daemon)
SHUT_RDWR);
}
#endif
- if (! MHD_join_thread_ (daemon->pid))
+ if (! MHD_join_thread_ (daemon->pid.handle))
{
MHD_PANIC (_("Failed to join a thread\n"));
}
diff --git a/src/microhttpd/internal.h b/src/microhttpd/internal.h
index 85fe2487..602a5d4f 100644
--- a/src/microhttpd/internal.h
+++ b/src/microhttpd/internal.h
@@ -755,7 +755,7 @@ struct MHD_Connection
* Thread handle for this connection (if we are using
* one thread per connection).
*/
- MHD_thread_handle_ pid;
+ MHD_thread_handle_ID_ pid;
/**
* Size of @e read_buffer (in bytes). This value indicates
@@ -1442,7 +1442,7 @@ struct MHD_Daemon
/**
* The select thread handle (if we have internal select)
*/
- MHD_thread_handle_ pid;
+ MHD_thread_handle_ID_ pid;
/**
* Mutex for per-IP connection counts.
diff --git a/src/microhttpd/mhd_threads.c b/src/microhttpd/mhd_threads.c
index dffbfd00..477080cf 100644
--- a/src/microhttpd/mhd_threads.c
+++ b/src/microhttpd/mhd_threads.c
@@ -38,14 +38,6 @@
#include <errno.h>
-
-#if defined(MHD_USE_POSIX_THREADS)
-typedef pthread_t MHD_thread_ID_;
-#elif defined(MHD_USE_W32_THREADS)
-typedef DWORD MHD_thread_ID_;
-#endif
-
-
#ifndef MHD_USE_THREAD_NAME_
#define MHD_set_thread_name_(t, n) (void)
@@ -183,7 +175,7 @@ MHD_set_thread_name_(const MHD_thread_ID_ thread_id,
* @return non-zero on success; zero otherwise (with errno set)
*/
int
-MHD_create_thread_ (MHD_thread_handle_ *thread,
+MHD_create_thread_ (MHD_thread_handle_ID_ *thread,
size_t stack_size,
MHD_THREAD_START_ROUTINE_ start_routine,
void *arg)
@@ -200,7 +192,7 @@ MHD_create_thread_ (MHD_thread_handle_ *thread,
res = pthread_attr_setstacksize (&attr,
stack_size);
if (0 == res)
- res = pthread_create (thread,
+ res = pthread_create (&(thread->handle),
&attr,
start_routine,
arg);
@@ -208,7 +200,7 @@ MHD_create_thread_ (MHD_thread_handle_ *thread,
}
}
else
- res = pthread_create (thread,
+ res = pthread_create (&(thread->handle),
NULL,
start_routine,
arg);
@@ -218,6 +210,7 @@ MHD_create_thread_ (MHD_thread_handle_ *thread,
return !res;
#elif defined(MHD_USE_W32_THREADS)
+ unsigned int thread_ID;
#if SIZE_MAX != UINT_MAX
if (stack_size > UINT_MAX)
{
@@ -226,15 +219,18 @@ MHD_create_thread_ (MHD_thread_handle_ *thread,
}
#endif /* SIZE_MAX != UINT_MAX */
- *thread = (HANDLE) _beginthreadex (NULL,
+ thread->handle = (MHD_thread_handle_)
+ _beginthreadex (NULL,
(unsigned int) stack_size,
start_routine,
arg,
0,
- NULL);
- if ((MHD_thread_handle_)-1 == (*thread))
+ &thread_ID);
+
+ if ((MHD_thread_handle_)-1 == thread->handle)
return 0;
+ thread->ID = (MHD_thread_ID_)thread_ID;
return !0;
#endif
}
@@ -294,7 +290,7 @@ named_thread_starter (void *data)
* @return non-zero on success; zero otherwise (with errno set)
*/
int
-MHD_create_named_thread_ (MHD_thread_handle_ *thread,
+MHD_create_named_thread_ (MHD_thread_handle_ID_ *thread,
const char* thread_name,
size_t stack_size,
MHD_THREAD_START_ROUTINE_ start_routine,
@@ -323,7 +319,7 @@ MHD_create_named_thread_ (MHD_thread_handle_ *thread,
res = pthread_attr_setstacksize (&attr,
stack_size);
if (0 == res)
- res = pthread_create (thread,
+ res = pthread_create (&(thread->handle),
&attr,
start_routine,
arg);
diff --git a/src/microhttpd/mhd_threads.h b/src/microhttpd/mhd_threads.h
index 988344b6..49bd77b8 100644
--- a/src/microhttpd/mhd_threads.h
+++ b/src/microhttpd/mhd_threads.h
@@ -86,6 +86,28 @@
#endif
#if defined(MHD_USE_POSIX_THREADS)
+ typedef pthread_t MHD_thread_ID_;
+#elif defined(MHD_USE_W32_THREADS)
+ typedef DWORD MHD_thread_ID_;
+#endif
+
+#if defined(MHD_USE_POSIX_THREADS)
+ union _MHD_thread_handle_ID_
+ {
+ MHD_thread_handle_ handle;
+ MHD_thread_ID_ ID;
+ };
+ typedef union _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
+#elif defined(MHD_USE_W32_THREADS)
+ struct _MHD_thread_handle_ID_
+ {
+ MHD_thread_handle_ handle;
+ MHD_thread_ID_ ID;
+ };
+ typedef struct _MHD_thread_handle_ID_ MHD_thread_handle_ID_;
+#endif
+
+#if defined(MHD_USE_POSIX_THREADS)
/**
* Wait until specified thread is ended and free thread handle on success.
* @param thread handle to watch
@@ -123,7 +145,7 @@ typedef MHD_THRD_RTRN_TYPE_
* @return non-zero on success; zero otherwise
*/
int
-MHD_create_thread_ (MHD_thread_handle_ *thread,
+MHD_create_thread_ (MHD_thread_handle_ID_ *thread,
size_t stack_size,
MHD_THREAD_START_ROUTINE_ start_routine,
void *arg);
@@ -142,7 +164,7 @@ MHD_create_thread_ (MHD_thread_handle_ *thread,
* @return non-zero on success; zero otherwise
*/
int
-MHD_create_named_thread_ (MHD_thread_handle_ *thread,
+MHD_create_named_thread_ (MHD_thread_handle_ID_ *thread,
const char* thread_name,
size_t stack_size,
MHD_THREAD_START_ROUTINE_ start_routine,
--
To stop receiving notification emails like this one, please contact
address@hidden