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
> 

Reply via email to