Hi, still no segfaults.
@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 >