Index: modules/http2/h2_session.c
===================================================================
--- modules/http2/h2_session.c	(revision 1784618)
+++ modules/http2/h2_session.c	(working copy)
@@ -718,24 +718,26 @@
     uint32_t n;
     apr_pool_t *pool = NULL;
     h2_session *session;
+    apr_status_t status;
     
-    apr_status_t status = apr_allocator_create(&allocator);
-    if (status != APR_SUCCESS) {
-        return NULL;
+    /* normally, connection pool allocators work without a mutex. However
+     * for http/2 connections, more multi-threading is going on and a mutex
+     * seems to be necessary. Set one, if it is missing. */
+    allocator = apr_pool_allocator_get(c->pool);
+    mutex = apr_allocator_mutex_get(allocator);
+    if (mutex == NULL) {
+        status = apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, c->pool);
+        if (status != APR_SUCCESS) {
+            return NULL;
+        }
+        apr_allocator_mutex_set(allocator, mutex);
     }
-    apr_allocator_max_free_set(allocator, ap_max_mem_free);
-    apr_pool_create_ex(&pool, c->pool, NULL, allocator);
+    
+    apr_pool_create(&pool, c->pool);
     if (!pool) {
-        apr_allocator_destroy(allocator);
         return NULL;
     }
     apr_pool_tag(pool, "h2_session");
-    apr_allocator_owner_set(allocator, pool);
-    status = apr_thread_mutex_create(&mutex, APR_THREAD_MUTEX_DEFAULT, pool);
-    if (status != APR_SUCCESS) {
-        apr_pool_destroy(pool);
-        return NULL;
-    }
     apr_allocator_mutex_set(allocator, mutex);
     
     /* get h2_session a lifetime beyond its pool and everything
