Repository navigation
Add tokio 1.54.1, Rust 1.99.1 - #20
Merged
Merged
Conversation
matrix.sh update pipes the Rust stable channel manifest, several megabytes, into an awk program that exits at the first `version =` line under `[pkg.rust]`. printf is still writing when awk exits, so it takes SIGPIPE and the weekly canary's log reads "printf: write error: Broken pipe". The version still parses, since nothing checks that pipeline's status, but the error reads as a failure. Have awk read to the end and print only the first match, as the per-minor channel loop below it already does for curl's pipe. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Both patches change Semaphore::close the same way: it pops the waiters in WakeList batches and wakes each batch with the list's lock released, where it woke every waiter under the lock. It still sets both closed flags and pops every node, which is all the acquire protocol reads. 1.53.3's io driver also re-exports io_uring's new register result. Neither patch moves a type a detector reads; the rest is AsyncFd's unsafe register, the duplex stream waking after unlocking, io_uring cancellation fixes, a current_thread self-unpark and join!'s unreachable_code allowance. Extend the 1.51 and 1.53 spans, add the new revisions' checksums, note the changes in the acquire and io protocols' docs, and move the tests' unread patches to 1.51.7 and 1.53.4. Pin 1.51.6 and 1.53.3 in place of 1.51.5 and 1.53.2, which moves the 1.51 cell and the latest role's four cells. Their walk, formats and summary goldens match their predecessors', as do the 1.53.3 cells' semantics. In 1.51.6's semantics, one more copy of async_trace_leaf's PollFn poll is inlined, so each program lists one fewer poll symbol for it, and http-conns lists the same rules in another order, renumbering them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tls-conns' unflushed client writes 64 KiB at a time until the socket refuses, and its golden pins the one record rustls is left holding. That count is not the program's: rustls cuts each write into four 16 KiB records and writes as much as the socket takes, so the records left are however many the kernel's cut leaves of the last write. How much the kernel takes is send-buffer autotuning and the host's memory, which is why its bytes are already masked, and the cut lands in a different record as that moves: an illumos host that had printed one record now prints three, at 1.99.0 as at 1.99.1. Write one record's worth at a time. The write the socket refuses then leaves exactly the record it was writing, wherever the kernel cut it, and the golden's one record holds on any host. No golden changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1.99.1 replaces 1.99.0 as the primary, so the fixtures build with it: the full tokio axis and the no-unstable and ct-only cells move to 1.99.1. Raise the rustc reviews' 1.99 span to it: the release changes only x86_64's bool-return extension in rustc_target's calling conventions, a wcslen builtin and LLD's rpath on Darwin, and every library file a convention lists hashes as it did in 1.99.0. regen.sh, the extraction golden test and exegesis's testlib build name the new primary with it. The extraction goldens do not change. The new matrix cells differ from the 1.99.0 cells they replace by the compiler's version string and by orders that follow its symbol hashes: a dyn's associated types, the order http-conns lists its rules and delegators in, and, in the 1.47.5 cell, the ids of two many-tasks task entries that tie on everything the canonical order compares. The core goldens change by the same build. The linux-floor set's info pages name the fixtures' new path. On Linux, http-conns' three hyper tasks trade canonical ids: they share a spawn site and a state, and their futures' types, which order them, are numbered in the bundle as the compiler's DWARF lists them. On illumos, armed-select's binary carries a second copy of futures-util's set waker vtable, so the waker sweep finds two. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build hansei with Rust 1.99.1, the release the fixtures moved their primary to in the previous commit. Clippy 1.99.1 raises nothing the tree has to change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
stale-local's one task parks on std::future::pending, which never reads its context, and nothing else in the program builds a task waker: its main future runs under block_on's thread waker and the oneshot send takes no context. rustc 1.99 with tokio 1.54 sees that the task's Context is never read, drops the waker it would have built, and the linker then drops tokio's WAKER_VTABLE and the four functions it names. Extraction requires that vtable, so the acceptance suite fails every test in those cells before any runs. Earlier toolchains, and 1.99 with tokio 1.53, happened to keep it. Park the task on a oneshot receiver whose sender main keeps, so the task registers its waker as a task waiting on anything does. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tokio 1.54 replaces the blocking pool's shared mutex with an InnerImpl enum: a Locked variant, one mutex over the queue and the thread state as Shared was, and a Sharded one, sixteen mutex-guarded shards each holding a queue, with the thread state behind a ShardedCoord mutex. A runtime picks one when it is built, through an unstable builder option or the TOKIO_UNSTABLE_SHARDED_BLOCKING_QUEUE environment variable, which every build reads. Built and extracted, 1.54.1 has no Shared.queue or Shared.worker_threads to bind, so its queued spawn_blocking cells cannot be listed and its pool threads cannot be named. Add a v1_54 family, descending from v1_53, whose module routes each walk through the variant that holds it: the queue and the thread map through Locked, the shards, each shard's queue and a second thread map through Sharded. On a runtime built the other way the route reads as an inactive variant, so the reader lists whichever queues the pool has and takes the thread map from the variant that is active. The sharded map is a new walk role, ShardedCoord.worker_threads, absent before 1.54; Shared.worker_threads and Shard.queue become versioned rows. The bundle format moves to 107. The rest of 1.54.1 leaves the reviews' claims standing. Acquire::poll checks the cooperative budget after a grant, so a poll the budget refuses returns Pending holding the whole grant, the state a grant between two polls already leaves. The io driver dispatches each event from a function of its own, a readiness clear keeps the shutdown bit, ReadyEvent's tick widens to u16, a new socket can be marked ready when it is created, and ReadExact and WriteAll poll again on Interrupted. Sleep converts its deadline to a tick itself, sleep and Interval clamp their delays, Notify relaxes its orderings, and a semaphore permit's count widens to usize. Raise the reviews to 1.54.1 with the new revisions' checksums and note each change in its review's doc. 1.54.0 was yanked: it moved the runtime handle out of the timer entry, which 1.54.1 reverted. So the 1.54 span starts at 1.54.1, 1.54.0 is refused as unreviewed, and the tests' unread release moves to 1.55.0. blocking-pool's builder sets the environment variable in the unstable builds, which releases before 1.54 ignore, so the 1.54.1 unstable cells core a sharded pool and the stable cell a locked one; the fixture's lines do not move. Pin 1.54.1 as the latest role, which moves its four cells off 1.53.3. Every walk binds in them. Every other cell's and extraction golden's walk report gains the sharded thread map, absent, and notes which family's entry Shared.worker_threads took, as Shard.queue does in 1.52.0's. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mask_core masks how many records tls-conns' stalled client holds unsent, beside the bytes, because illumos left three where Linux left one: the client wrote 64 KiB at a time, four records, and how many of the refused write's records stayed unsent was where the send buffer filled inside it. The client now writes one record's worth at a time, so the write the socket refuses leaves exactly one record behind on every host, and the count is the program's again. Keep the count, as before the mask: a capture holding any other count is a fixture that no longer stalls the way it says, which a masked line cannot show. The bytes still mask, singular included, since the kernel can cut the last write down to its final byte, and a connection holding nothing unsent still passes through untouched. The three platforms' tls-conns-tasks-exec-trace goldens go back to one unsent record. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
wfchandler
force-pushed
the
canary-releases
branch
from
October 23, 2026 15:52
a21aa1d to
5128ed1
Compare
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.
Add latest tokio and toolchain versions.