From: Yann Ylavic Date: Fri, 19 Jan 2018 08:26:00 +0000 (+0000) Subject: mpm_event: Follow up to r1821558. X-Git-Tag: 2.5.0-alpha2-ci-test-only~2952 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ff6f80d69b95285dcbaee27309feee466cce6a0;p=thirdparty%2Fapache%2Fhttpd.git mpm_event: Follow up to r1821558. Don't crash (in listener) if we can't create the ptrans allocator. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1821595 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/server/mpm/event/event.c b/server/mpm/event/event.c index 8c4d1e058ff..b272433aa1b 100644 --- a/server/mpm/event/event.c +++ b/server/mpm/event/event.c @@ -2053,23 +2053,31 @@ static void * APR_THREAD_FUNC listener_thread(apr_thread_t * thd, void *dummy) if (ptrans == NULL) { /* create a new transaction pool for each accepted socket */ - 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); - if (ptrans == NULL) { + apr_allocator_t *allocator = NULL; + + rc = apr_allocator_create(&allocator); + if (rc == APR_SUCCESS) { + apr_allocator_max_free_set(allocator, + ap_max_mem_free); + rc = apr_pool_create_ex(&ptrans, pconf, NULL, + allocator); + if (rc == APR_SUCCESS) { + apr_pool_tag(ptrans, "transaction"); + apr_allocator_owner_set(allocator, ptrans); + } + } + 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); + if (allocator) { + apr_allocator_destroy(allocator); + } resource_shortage = 1; signal_threads(ST_GRACEFUL); continue; } - apr_allocator_owner_set(allocator, ptrans); } - apr_pool_tag(ptrans, "transaction"); get_worker(&have_idle_worker, 1, &workers_were_busy); rc = lr->accept_func(&csd, lr, ptrans);