On 07 Feb 2022, at 12:35, Stefan Eissing <[email protected]> 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
—