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

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