> Am 16.02.2017 um 19:51 schrieb Stefan Priebe - Profihost AG 
> <s.pri...@profihost.ag>:
> 
> Hi,
> 
> Am 16.02.2017 um 11:39 schrieb Stefan Eissing:
>> 
>>> Am 15.02.2017 um 20:53 schrieb Stefan Priebe - Profihost AG 
>>> <s.pri...@profihost.ag>:
>>> 
>>> Hi,
>>> 
>>> still no segfaults.
>> 
>> My heart sings with joy. Can you keep on sending that message every morning? 
>> thanks!
> 
> I've no time tomorrow morning - so i've just checked again. Still no
> segfaults.

I will sleep soundly then. Thanks a lot! :)

>>> @Yann
>>> Are those patches (the addon on top of v7) and the one on top of mod_ssl
>>> still correct / needed?
>>> 
>>> Stefan
>>> 
>>> Am 15.02.2017 um 12:45 schrieb Stefan Priebe - Profihost AG:
>>>> Hi,
>>>> Am 15.02.2017 um 12:19 schrieb Yann Ylavic:
>>>>> Hi Stefan,
>>>>> 
>>>>> On Wed, Feb 15, 2017 at 9:34 AM, Stefan Priebe - Profihost AG
>>>>> <s.pri...@profihost.ag> wrote:
>>>>>> Current status: no segfaults.
>>>>> 
>>>>> Is this with or without the mpm_event's wakeup and/or allocator patches?
>>>> 
>>>> it's with the mpm_event_listener_wakeup_bug57399_V7 +
>>>> 
>>>> --- a/build/httpd/server/mpm/event/event.c      (revision 1776076)
>>>> +++ b/build/httpd/server/mpm/event/event.c      (working copy)
>>>> @@ -1743,6 +1743,8 @@ static void * APR_THREAD_FUNC listener_thread(apr_
>>>>                    enable_listensocks(process_slot);
>>>>                }
>>>>                if (!listeners_disabled) {
>>>> +                    apr_thread_mutex_t *mutex;
>>>> +
>>>>                    lr = (ap_listen_rec *) pt->baton;
>>>>                    ap_pop_pool(&ptrans, worker_queue_info);
>>>> 
>>>> @@ -1751,19 +1753,24 @@ static void * APR_THREAD_FUNC listener_thread(apr_
>>>>                        apr_allocator_t *allocator;
>>>> 
>>>>                        apr_allocator_create(&allocator);
>>>> -                        apr_allocator_max_free_set(allocator,
>>>> -                                                   ap_max_mem_free);
>>>> -                        apr_pool_create_ex(&ptrans, pconf, NULL,
>>>> allocator);
>>>> -                        apr_allocator_owner_set(allocator, ptrans);
>>>> -                        if (ptrans == NULL) {
>>>> +                        apr_allocator_max_free_set(allocator,
>>>> ap_max_mem_free);
>>>> +                        rc = apr_pool_create_ex(&ptrans, pconf, NULL,
>>>> +                                                allocator);
>>>> +                        if (rc != APR_SUCCESS) {
>>>>                            ap_log_error(APLOG_MARK, APLOG_CRIT, rc,
>>>>                                         ap_server_conf, APLOGNO(03097)
>>>>                                         "Failed to create transaction
>>>> pool");
>>>> +                            apr_allocator_destroy(allocator);
>>>>                            signal_threads(ST_GRACEFUL);
>>>>                            return NULL;
>>>>                        }
>>>> +                        apr_allocator_owner_set(allocator, ptrans);
>>>> +                        apr_pool_tag(ptrans, "transaction");
>>>>                    }
>>>> -                    apr_pool_tag(ptrans, "transaction");
>>>> +                    apr_thread_mutex_create(&mutex,
>>>> APR_THREAD_MUTEX_DEFAULT,
>>>> +                                            ptrans);
>>>> +                    
>>>> apr_allocator_mutex_set(apr_pool_allocator_get(ptrans),
>>>> +                                            mutex);
>>>> 
>>>>                    get_worker(&have_idle_worker, 1, &workers_were_busy);
>>>>                    rc = lr->accept_func(&csd, lr, ptrans);
>>>> 
>>>> 
>>>> +
>>>> 
>>>> Index: a/build/httpd/modules/ssl/ssl_engine_io.c
>>>> ===================================================================
>>>> --- a/build/httpd/modules/ssl/ssl_engine_io.c (revision 1781324)
>>>> +++ b/build/httpd/modules/ssl/ssl_engine_io.c (working copy)
>>>> @@ -138,6 +138,7 @@ static int bio_filter_out_pass(bio_filter_out_ctx_
>>>> 
>>>>    outctx->rc = ap_pass_brigade(outctx->filter_ctx->pOutputFilter->next,
>>>>                                 outctx->bb);
>>>> +    apr_brigade_cleanup(outctx->bb);
>>>>    /* Fail if the connection was reset: */
>>>>    if (outctx->rc == APR_SUCCESS && outctx->c->aborted) {
>>>>        outctx->rc = APR_ECONNRESET;
>>>> @@ -1699,13 +1700,12 @@ static apr_status_t ssl_io_filter_output(ap_filter
>>>>    while (!APR_BRIGADE_EMPTY(bb) && status == APR_SUCCESS) {
>>>>        apr_bucket *bucket = APR_BRIGADE_FIRST(bb);
>>>> 
>>>> -        if (APR_BUCKET_IS_METADATA(bucket)) {
>>>> +        if (APR_BUCKET_IS_METADATA(bucket) || !filter_ctx->pssl) {
>>>>            /* Pass through metadata buckets untouched.  EOC is
>>>>             * special; terminate the SSL layer first. */
>>>>            if (AP_BUCKET_IS_EOC(bucket)) {
>>>>                ssl_filter_io_shutdown(filter_ctx, f->c, 0);
>>>>            }
>>>> -            AP_DEBUG_ASSERT(APR_BRIGADE_EMPTY(outctx->bb));
>>>> 
>>>>            /* Metadata buckets are passed one per brigade; it might
>>>>             * be more efficient (but also more complex) to use
>>>> @@ -1712,11 +1712,10 @@ static apr_status_t ssl_io_filter_output(ap_filter
>>>>             * outctx->bb as a true buffer and interleave these with
>>>>             * data buckets. */
>>>>            APR_BUCKET_REMOVE(bucket);
>>>> -            APR_BRIGADE_INSERT_HEAD(outctx->bb, bucket);
>>>> -            status = ap_pass_brigade(f->next, outctx->bb);
>>>> -            if (status == APR_SUCCESS && f->c->aborted)
>>>> -                status = APR_ECONNRESET;
>>>> -            apr_brigade_cleanup(outctx->bb);
>>>> +            APR_BRIGADE_INSERT_TAIL(outctx->bb, bucket);
>>>> +            if (bio_filter_out_pass(outctx) < 0) {
>>>> +                status = outctx->rc;
>>>> +            }
>>>>        }
>>>>        else {
>>>>            /* Filter a data bucket. */
>>>> 
>>>> 
>>>> Greets,
>>>> Stefan
>>>> 
>> 
>> Stefan Eissing
>> 
>> <green/>bytes GmbH
>> Hafenstrasse 16
>> 48155 Münster
>> www.greenbytes.de
>> 

Stefan Eissing

<green/>bytes GmbH
Hafenstrasse 16
48155 Münster
www.greenbytes.de

Reply via email to