]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
On the trunk:
authorStefan Eissing <icing@apache.org>
Sat, 25 Feb 2017 12:15:20 +0000 (12:15 +0000)
committerStefan Eissing <icing@apache.org>
Sat, 25 Feb 2017 12:15:20 +0000 (12:15 +0000)
mod_http2: installing own mutex'ed allocator on main session pool.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1784372 13f79535-47bb-0310-9956-ffa450edef68

modules/http2/h2_session.c

index d5ac7662ab94a0c9f4e2351613c06f4e79c2b189..99a9c094d74c12791fd326fd8bd380c72cb0c847 100644 (file)
@@ -27,6 +27,8 @@
 #include <http_log.h>
 #include <scoreboard.h>
 
+#include <mpm_common.h>
+
 #include "h2_private.h"
 #include "h2.h"
 #include "h2_bucket_eos.h"
@@ -711,16 +713,31 @@ static h2_session *h2_session_create_int(conn_rec *c,
 {
     nghttp2_session_callbacks *callbacks = NULL;
     nghttp2_option *options = NULL;
+    apr_allocator_t *allocator;
+    apr_thread_mutex_t *mutex;
     uint32_t n;
-
     apr_pool_t *pool = NULL;
-    apr_status_t status = apr_pool_create(&pool, c->pool);
     h2_session *session;
+    
+    apr_status_t status = apr_allocator_create(&allocator);
     if (status != APR_SUCCESS) {
         return NULL;
     }
+    apr_allocator_max_free_set(allocator, ap_max_mem_free);
+    apr_pool_create_ex(&pool, c->pool, NULL, allocator);
+    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
      * connected to it. */
     session = apr_pcalloc(pool, sizeof(h2_session));