On 07 Feb 2022, at 12:35, Stefan Eissing <ste...@eissing.org> wrote:

>> There are two parts that hook into the process_connection hook, the code 
>> you’ve cited above, and this code:
>> 
>> void h2_c2_register_hooks(void)
>> {
>>    /* When the connection processing actually starts, we might
>>     * take over, if the connection is for a h2 stream.
>>     */
>>    ap_hook_process_connection(h2_c2_hook_process,
>>                               NULL, NULL, APR_HOOK_FIRST);
>> 
>> Looks like this code is running before mod_ssl somehow.
>> 
>> Is there a way to run the httpd under test in either lldb or gdb?
> 
> The names "h2_c1..." and "h2_c2..." indicate, that the former operates on 
> "primary" connections, e.g. the ones from a client where SSL is applied, and 
> "secondary" connections (c->master != NULL), e.g. where h2 requests are 
> processed and SSL is not involved.

In theory it’s all the same hook though, so even though h2_c2_hook_process() is 
standing out of the way of anything not a secondary connection, it’s still 
running before mod_ssl, and it still throws away the AGAIN, leaving mod_ssl in 
an undefined state.

I’m assuming h2_c2_hook_process just wants to run before 
h2_c1_hook_process_connection?

I just tried this patch on rawhide (where I’m getting success with the http2 
tests) and we still work:

Index: modules/http2/h2_c1.c
===================================================================
--- modules/http2/h2_c1.c       (revision 1897807)
+++ modules/http2/h2_c1.c       (working copy)
@@ -312,6 +312,7 @@
 
 static const char* const mod_ssl[]        = { "mod_ssl.c", NULL};
 static const char* const mod_reqtimeout[] = { "mod_ssl.c", "mod_reqtimeout.c", 
NULL};
+static const char* const mod_h2_c2[]      = { "mod_ssl.c", "mod_reqtimeout.c", 
"h2_c2.c", NULL};
 
 void h2_c1_register_hooks(void)
 {
@@ -322,7 +323,7 @@
      * a chance to take over before it.
      */
     ap_hook_process_connection(h2_c1_hook_process_connection,
-                               mod_reqtimeout, NULL, APR_HOOK_LAST);
+                               mod_h2_c2, NULL, APR_HOOK_LAST);
 
     /* One last chance to properly say goodbye if we have not done so
      * already. */
Index: modules/http2/h2_c2.c
===================================================================
--- modules/http2/h2_c2.c       (revision 1897807)
+++ modules/http2/h2_c2.c       (working copy)
@@ -707,7 +707,7 @@
      * take over, if the connection is for a h2 stream.
      */
     ap_hook_process_connection(h2_c2_hook_process,
-                               NULL, NULL, APR_HOOK_FIRST);
+                               NULL, NULL, APR_HOOK_LAST);
     /* We need to manipulate the standard HTTP/1.1 protocol filters and
      * install our own. This needs to be done very early. */
     ap_hook_post_read_request(h2_c2_hook_post_read_request, NULL, NULL, 
APR_HOOK_REALLY_FIRST);

Regards,
Graham
—

Reply via email to