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

Reply via email to