futures-rs: Potential panic in FuturesUnordered
EDIT(taiki-e): The regression that occurred in 0.3.18 has been fixed in 0.3.19, but the underlying problem that 0.3.18 tried to fix has not been fixed yet. This issue has been reused to track that problem as there is a detailed discussion on that problem.
Hey folks,
After upgrading to futures 0.3.18 from 0.3.17, we’ve noticed our application is panicking under high load. The panic seems to originate in src/stream/futures_unordered/ready_to_run_queue.rs:104 due to the error message inconsistent in drop:
thread 'tokio-runtime-worker' panicked at 'inconsistent in drop', /usr/local/cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.18/src/stream/futures_unordered/abort.rs:11:5
stack backtrace:
0: rust_begin_unwind
at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/std/src/panicking.rs:517:5
1: std::panicking::begin_panic_fmt
at /rustc/59eed8a2aac0230a8b53e89d4e99d55912ba6b35/library/std/src/panicking.rs:460:5
2: futures_util::stream::futures_unordered::abort::abort
3: <futures_util::stream::futures_unordered::FuturesUnordered<Fut> as core::ops::drop::Drop>::drop
4: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
5: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
6: <mysql_async::BoxFuture<T> as core::future::future::Future>::poll
7: <mysql_async::conn::pool::futures::get_conn::GetConn as core::future::future::Future>::poll
8: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
9: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
10: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
11: <core::future::from_generator::GenFuture<T> as core::future::future::Future>::poll
This panic causes a double panic that aborts the application. This seems to only happen when under high load, so it may be a race condition that only happens when there’s multiple threads running futures from the FuturesUnordered. I haven’t been able to create a minimal project to reproduce.
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Reactions: 3
- Comments: 22 (10 by maintainers)
Commits related to this issue
- Futures 0.3.18 has been Yanked See: https://github.com/rust-lang/futures-rs/issues/2529 — committed to thomasmatecki/rg3d by thomasmatecki 3 years ago
- Merge #3243 3243: chore: downgrade futures version r=yangby-cryptape,chanhsu001 a=driftluo ### What problem does this PR solve? ref https://github.com/rust-lang/futures-rs/issues/2529, 0.3.18 has... — committed to nervosnetwork/ckb by bors[bot] 3 years ago
- Futures 0.3.18 has been Yanked https://github.com/rust-lang/futures-rs/issues/2529 — committed to paulip1792/snarkOS by paulip1792 3 years ago
- cargo update In the three days since the last update, `futures 0.3.18` was yanked due to panics: https://github.com/rust-lang/futures-rs/issues/2529 — committed to str4d/zcash by str4d 3 years ago
- Merge #929 929: Fall back to older version of futures, version 0.3.18 was yanked r=Yatekii a=Tiwalun Revert futures to version 0.3.17 in target-gen, version 0.3.18 was yanked. See rust-lang/futures... — committed to probe-rs/probe-rs by bors[bot] 3 years ago
(I’ve yanked futures/futures-util 0.3.18)
I’ve also hit this issue. Since this is a heisenbug that anyone can get through cargo update, I suggest 0.3.18 be yanked and a 0.3.19 cut with a fix. I’d be happy to provide a patch but I’m not sure if a revert #2493 would be accepted or if @ibraheemdev wants try to fix it differently.