commit c39414cdc7a461ee573205cfe371853d0d1f94d8
parent c932ba77fde49a5c22374de96b8e56b17e746462
Author: Christian Grothoff <christian@grothoff.org>
Date: Tue, 15 Mar 2016 20:54:16 +0000
Dan Dedrick wrote:
If pthread_create fails for some reason we need to not access the
thread pointer as it will not be valid. Without this check a failed
return code from pthread_create would cause a SIGSEGV to occur.
An instance that pthread_create could fail is if enough connections were
established that we ran out of space in our mapping to create another
thread stack. Specifically I have seen this occur with
systemd-journal-gatewayd where there was a bug with not releasing
connections after they had disconnected. I submitted a fix for that
here: https://github.com/systemd/systemd/pull/2287 but it would really
be best if libmicrohttpd didn't SIGSEGV under these conditions.
Diffstat:
3 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,6 @@
+Tue Mar 15 21:52:27 CET 2016
+ Do not crash if pthread_create() fails. -DD
+
Tue Mar 15 20:29:34 CET 2016
Do not use eready DLL data structure unless
we are actually using epoll(). -DD/CG
diff --git a/src/include/microhttpd.h b/src/include/microhttpd.h
@@ -130,7 +130,7 @@ typedef intptr_t ssize_t;
* Current version of the library.
* 0x01093001 = 1.9.30-1.
*/
-#define MHD_VERSION 0x00094803
+#define MHD_VERSION 0x00094804
/**
* MHD-internal return code for "YES".
diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c
@@ -1283,7 +1283,8 @@ create_thread (MHD_thread_handle_ *thread,
ret = pthread_create (thread, pattr,
start_routine, arg);
#ifdef HAVE_PTHREAD_SETNAME_NP
- (void) pthread_setname_np (*thread, "libmicrohttpd");
+ if (0 == ret)
+ (void) pthread_setname_np (*thread, "libmicrohttpd");
#endif /* HAVE_PTHREAD_SETNAME_NP */
if (0 != daemon->thread_stack_size)
pthread_attr_destroy (&attr);