You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ic...@apache.org on 2017/03/12 14:02:33 UTC

svn commit: r1786575 - /httpd/httpd/trunk/modules/http2/h2_session.c

Author: icing
Date: Sun Mar 12 14:02:33 2017
New Revision: 1786575

URL: http://svn.apache.org/viewvc?rev=1786575&view=rev
Log:
On the trunk:

mod_http2: session pool cleanup at pre_close.


Modified:
    httpd/httpd/trunk/modules/http2/h2_session.c

Modified: httpd/httpd/trunk/modules/http2/h2_session.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/http2/h2_session.c?rev=1786575&r1=1786574&r2=1786575&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http2/h2_session.c (original)
+++ httpd/httpd/trunk/modules/http2/h2_session.c Sun Mar 12 14:02:33 2017
@@ -712,6 +712,7 @@ static apr_status_t session_cleanup(h2_s
     session->ngh2 = NULL;
     h2_ctx_clear(c);
     
+    
     return APR_SUCCESS;
 }
 
@@ -2229,9 +2230,19 @@ out:
 
 apr_status_t h2_session_pre_close(h2_session *session, int async)
 {
+    apr_status_t status;
+    
     ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, session->c, 
                   H2_SSSN_MSG(session, "pre_close"));
     dispatch_event(session, H2_SESSION_EV_PRE_CLOSE, 0, 
         (session->state == H2_SESSION_ST_IDLE)? "timeout" : NULL);
-    return session_cleanup(session, "pre_close");
+    status = session_cleanup(session, "pre_close");
+    if (status == APR_SUCCESS) {
+        /* no one should hold a reference to this session any longer and
+         * the h2_ctx was removed from the connection.
+         * Take the pool (and thus all subpools etc. down now, instead of
+         * during cleanup of main connection pool. */
+        apr_pool_destroy(session->pool);
+    }
+    return status;
 }