You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by yl...@apache.org on 2018/01/19 08:26:00 UTC

svn commit: r1821595 - /httpd/httpd/trunk/server/mpm/event/event.c

Author: ylavic
Date: Fri Jan 19 08:26:00 2018
New Revision: 1821595

URL: http://svn.apache.org/viewvc?rev=1821595&view=rev
Log:
mpm_event: Follow up to r1821558.

Don't crash (in listener) if we can't create the ptrans allocator.


Modified:
    httpd/httpd/trunk/server/mpm/event/event.c

Modified: httpd/httpd/trunk/server/mpm/event/event.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/server/mpm/event/event.c?rev=1821595&r1=1821594&r2=1821595&view=diff
==============================================================================
--- httpd/httpd/trunk/server/mpm/event/event.c (original)
+++ httpd/httpd/trunk/server/mpm/event/event.c Fri Jan 19 08:26:00 2018
@@ -2053,23 +2053,31 @@ static void * APR_THREAD_FUNC listener_t
 
                     if (ptrans == NULL) {
                         /* create a new transaction pool for each accepted socket */
-                        apr_allocator_t *allocator;
+                        apr_allocator_t *allocator = NULL;
 
-                        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) {
+                        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);