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 >