> 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