Repository navigation
release: 0.20.392 - #392
Merged
Merged
Conversation
All eleven published packages share one version; the bump is only their Version elements, and IoxideRuntime.Version is generated from ioxide.csproj. ioxide.redis.stackexchange is bumped too, though CI does not pack it. On this tree (main at b0fbb69 plus the bump) all eight suites pass with none skipped: E2E 326, Unit 105, Http 89, Tls 194, Chaos 80, File 5, Pg 18 and Redis 6, with one test pending in Redis (#336).
MDA2AV
added a commit
that referenced
this pull request
Oct 24, 2026
…topped (#394) E2E crashed with exit 139 in about a third of CI runs since #388, the #392 release merge among them, so 0.20.392 was never packed or published. Tests wrote `using var engine = new QuicEngine(...)`, which disposed the engine where the test body ended, before the runner stopped the server. The reactor's teardown then freed each live connection through ptls_free, which reads the TLS context the engine had already freed. It crashed only when that memory had been reused. Under glibc's malloc perturb it crashes on every run, on main and on a build from before #388 alike. TestServer.Own hands an engine to the harness, which disposes it in StopAll once the reactors have joined. The 145 sites that disposed theirs in the test body now use it.
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All eleven published packages share one version, as always. The bump is only their
Versionelements;IoxideRuntime.Versionis generated fromioxide.csproj.ioxide.redis.stackexchangeis bumped too, so a manual pack matches, but CI does not pack it.Carries everything since 0.18.374:
ServerConfigsize the reactor cannot run with is refused when theReactoris constructed, instead of at the first accept.ServerConfigopens no TCP listener unless it setsTcp, so a QUIC-only server no longer binds 8080.ZeroCopySendreaches incremental-mode connections instead of being silently ignored.SendTimeoutMsinstead of pinning its connection forever.QuicEngineConnection.PeerCertificateDer.Breaking
EnablePackageValidation, baseline 0.18.374) reports no break in the eleven packages; quic: the handler can read the verified client certificate, QuicEngineConnection.PeerCertificateDer #389'sPeerCertificateDeris an addition. As a control,ioxideagainst 0.16.281 reports the knownCreateTcpchange.ServerConfig.Tcpnow defaults to null, which opens no TCP listener. A server that never setTcpand served TCP on 8080 must setTcp = new TcpOptions(). The Kestrel adapter sets it itself.RecvQueueEntriesorRecvSlotsthat is not a power of two, aWriteSlabSizeof 0, ...) throwsArgumentOutOfRangeExceptionfrom theReactorconstructor.Native
libioxide_ngtcp2.so: rebuilt byscripts/build-ngtcp2-native.shfor quic: a second ClientHello naming a different host than the first is refused instead of answered #376, quic: a client common name carrying a control character is refused, as TCP refuses it #377, quic: a rotation re-reads client trust anchors from their file, as TCP does #388 and quic: the handler can read the verified client certificate, QuicEngineConnection.PeerCertificateDer #389 (2.9 MB, as before). Its ABI goes from 6 to 7, for quic: the handler can read the verified client certificate, QuicEngineConnection.PeerCertificateDer #389'siq_conn_peer_certificate.libioxide_boringssl.so,libioxide_nghttp2.soandlibioxide_nghttp3.soare unchanged.The packages ship the library; consumers rebuild nothing. Checked from outside the repo: a net10.0 app referencing the packed
ioxide,ioxide.ngtcp2andioxide.http30.20.392, restored into a private packages folder, reportsIoxideRuntime.Version0.20.392 and serves h3 and TCP on one reactor.curl-h3, verifying against the app's CA, gets the h3 response, and without the CA it refuses the certificate. The app loadslibioxide_ngtcp2.sofrom the package'sruntimes/linux-x64/native, byte-identical to the one committed here.On this branch's tree (main at b0fbb69, plus the bump), all eight suites pass with none skipped: E2E 326, Unit 105, Http 89, Tls 194, Chaos 80, File 5, Pg 18 and Redis 6. The
tlsmodule was loaded, so the kTLS tests ran.One test stays pending, in Redis (#336): it pins a known gap and fails the run once the gap is fixed. The other seven suites have none left.