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.

Greets,
Stefan

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

Reply via email to