Closed andyleiserson closed 4 months ago
Can you try to pin the shuttle version 0.6 and see if it works. There was also a release of 0.7 along with rustc that could've broken it.
It fails with either version 0.6 or 0.7 of shuttle. Unfortunately only release builds fail.
I added some debug prints to StreamCollection::add_waker
that suggest it is a false positive, because the original and replacement wakers are the same until cloned in add_waker
. (The pairs of hex values are the data
and vtable
members of the raw waker.)
2024-05-02T21:49:30.542275Z INFO ipa_core::helpers::transport::stream::collection: add_waker(0x6000038a40e0): H2 protocol/iter0/cardinality (0x14c307ad0 0x1004ec598)
2024-05-02T21:49:30.542310Z INFO ipa_core::helpers::transport::stream::collection: inserting waker 0x14c307ad0 0x1004ea2f0
...
2024-05-02T21:49:35.377006Z INFO ipa_core::helpers::transport::stream::collection: add_waker(0x6000038a40e0): H2 protocol/iter0/cardinality (0x14c307ad0 0x1004ec598)
2024-05-02T21:49:35.377050Z INFO ipa_core::helpers::transport::stream::collection: found existing waker 0x14c307ad0 0x1004ea2f0
The original and cloned vtables even have the same contents, even though they are distinct in memory:
(lldb) x/4gx 0x1004ea2f0
0x1004ea2f0: 0x000000010004e958 0x000000010004de28
0x1004ea300: 0x000000010004ea80 0x000000010004d824
(lldb) x/4gx 0x1004ec598
0x1004ec598: 0x000000010004e958 0x000000010004de28
0x1004ec5a8: 0x000000010004ea80 0x000000010004d824
Here we go: https://github.com/rust-lang/rust/pull/119863
great catch, I guess we need to get rid of will_wake
checks - they don't do us any good.
Will work on that
I see this failure consistently on my local machine (aarch64-apple-darwin) after upgrading to rust 1.78, but not in CI (e.g. https://github.com/private-attribution/ipa/actions/runs/8929174792/job/24526364966?pr=1035).
Command:
cargo test -p ipa-core --release --features "shuttle multi-threading" -- shuffle::sharded::tests::empty
(non_empty_input
also fails)Output: