Nevermind this is actually right I just got confused re-reading what this actually checks. I think the original patch is still reasonable.
On Tue, Mar 15, 2016 at 3:46 PM, Dan Dedrick <[email protected]> wrote: > Sorry I screwed up this patch. I need to swap this check. Please ignore. > > Dan > > On Tue, Mar 15, 2016 at 3:45 PM, Dan Dedrick <[email protected]> > 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. >> --- >> src/microhttpd/daemon.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/src/microhttpd/daemon.c b/src/microhttpd/daemon.c >> index 1478604..e4d4e91 100644 >> --- 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); >> -- >> 2.4.3 >> >> >
