On 25 Jan 2022, at 14:11, Stefan Eissing <ste...@eissing.org> wrote: > Also, while running the http2 test suite, I get repeated assert failures in > event.c:1230 > > if (rv != APR_SUCCESS && !APR_STATUS_IS_EEXIST(rv)) { > -> AP_DEBUG_ASSERT(0); > TO_QUEUE_REMOVE(cs->sc->wc_q, cs); > apr_thread_mutex_unlock(timeout_mutex); > ap_log_error(APLOG_MARK, APLOG_ERR, rv, ap_server_conf, APLOGNO(03465) > "process_socket: apr_pollset_add failure for " > "write completion"); > close_connection(cs); > signal_threads(ST_GRACEFUL); > }
One line above is this: rv = apr_pollset_add(event_pollset, &cs->pfd); and looking up the log we fail with a bad file descriptor. This looks like it’s being triggered by this: https://github.com/apache/apr/blob/trunk/poll/unix/poll.c#L194 which in turn looks like an apr_file_t is being added to the connection. Does that seem familiar? To explain what’s changed in mod_ssl, a bug has been fixed. In the old mod_ssl, directly after connecting we make one single attempt to read zero bytes in a blocking connection. OpenSSL kicks in and performs reads and writes to finish the handshake. And then if that failed for whatever reason - brokenly - we throw the errors away and pretend nothing happened. https://github.com/apache/httpd/blob/2.4.x/modules/ssl/mod_ssl.c#L695 We then get into the protocol handler, and in http/1.1 we read the now broken connection a second time here: https://github.com/apache/httpd/blob/2.4.x/modules/http/http_core.c#L148 Is the http2 code doing anything to work around mod_ssl trying to read, failing, throwing away the error, and then pretending nothing happened? To fix this behaviour, I suspect whatever you needed to do to work around the mod_ssl bug needs to be undone. Regards, Graham —