Changed log to tracing

This commit is contained in:
Igor Katson 2023-11-19 12:50:11 +00:00
parent db12bba7a6
commit 48a14823fa
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
26 changed files with 321 additions and 689 deletions

186
Cargo.lock generated
View file

@ -410,19 +410,6 @@ dependencies = [
"cfg-if", "cfg-if",
] ]
[[package]]
name = "env_logger"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
dependencies = [
"humantime",
"is-terminal",
"log",
"regex",
"termcolor",
]
[[package]] [[package]]
name = "equivalent" name = "equivalent"
version = "1.0.1" version = "1.0.1"
@ -689,12 +676,6 @@ version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
[[package]]
name = "humantime"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]] [[package]]
name = "hyper" name = "hyper"
version = "0.14.27" version = "0.14.27"
@ -781,17 +762,6 @@ version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
[[package]]
name = "is-terminal"
version = "0.4.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
dependencies = [
"hermit-abi",
"rustix",
"windows-sys",
]
[[package]] [[package]]
name = "itertools" name = "itertools"
version = "0.12.0" version = "0.12.0"
@ -860,10 +830,8 @@ dependencies = [
"librqbit-dht", "librqbit-dht",
"librqbit-peer-protocol", "librqbit-peer-protocol",
"librqbit-sha1-wrapper", "librqbit-sha1-wrapper",
"log",
"openssl", "openssl",
"parking_lot", "parking_lot",
"pretty_env_logger",
"rand", "rand",
"regex", "regex",
"reqwest", "reqwest",
@ -874,6 +842,7 @@ dependencies = [
"size_format", "size_format",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
"tracing",
"url", "url",
"urlencoding", "urlencoding",
"uuid", "uuid",
@ -912,7 +881,6 @@ dependencies = [
"librqbit-bencode", "librqbit-bencode",
"librqbit-buffers", "librqbit-buffers",
"librqbit-clone-to-owned", "librqbit-clone-to-owned",
"log",
"parking_lot", "parking_lot",
"serde", "serde",
"url", "url",
@ -931,14 +899,13 @@ dependencies = [
"librqbit-bencode", "librqbit-bencode",
"librqbit-clone-to-owned", "librqbit-clone-to-owned",
"librqbit-core", "librqbit-core",
"log",
"parking_lot", "parking_lot",
"pretty_env_logger",
"rand", "rand",
"serde", "serde",
"serde_json", "serde_json",
"tokio", "tokio",
"tokio-stream", "tokio-stream",
"tracing",
] ]
[[package]] [[package]]
@ -987,6 +954,15 @@ version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "matchers"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
dependencies = [
"regex-automata 0.1.10",
]
[[package]] [[package]]
name = "matchit" name = "matchit"
version = "0.7.3" version = "0.7.3"
@ -1043,6 +1019,16 @@ dependencies = [
"tempfile", "tempfile",
] ]
[[package]]
name = "nu-ansi-term"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
dependencies = [
"overload",
"winapi",
]
[[package]] [[package]]
name = "num" name = "num"
version = "0.2.1" version = "0.2.1"
@ -1195,6 +1181,12 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
[[package]]
name = "overload"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
[[package]] [[package]]
name = "parking_lot" name = "parking_lot"
version = "0.12.1" version = "0.12.1"
@ -1279,16 +1271,6 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "pretty_env_logger"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c"
dependencies = [
"env_logger",
"log",
]
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.69" version = "1.0.69"
@ -1371,8 +1353,17 @@ checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
"regex-automata", "regex-automata 0.4.3",
"regex-syntax", "regex-syntax 0.8.2",
]
[[package]]
name = "regex-automata"
version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
dependencies = [
"regex-syntax 0.6.29",
] ]
[[package]] [[package]]
@ -1383,9 +1374,15 @@ checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [ dependencies = [
"aho-corasick", "aho-corasick",
"memchr", "memchr",
"regex-syntax", "regex-syntax 0.8.2",
] ]
[[package]]
name = "regex-syntax"
version = "0.6.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]] [[package]]
name = "regex-syntax" name = "regex-syntax"
version = "0.8.2" version = "0.8.2"
@ -1458,15 +1455,15 @@ dependencies = [
"futures", "futures",
"librqbit", "librqbit",
"librqbit-dht", "librqbit-dht",
"log",
"parse_duration", "parse_duration",
"pretty_env_logger",
"regex", "regex",
"reqwest", "reqwest",
"serde", "serde",
"serde_json", "serde_json",
"size_format", "size_format",
"tokio", "tokio",
"tracing",
"tracing-subscriber",
] ]
[[package]] [[package]]
@ -1490,9 +1487,9 @@ dependencies = [
[[package]] [[package]]
name = "rustls" name = "rustls"
version = "0.21.8" version = "0.21.9"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "446e14c5cda4f3f30fe71863c34ec70f5ac79d6087097ad0bb433e1be5edf04c" checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
dependencies = [ dependencies = [
"log", "log",
"ring", "ring",
@ -1643,6 +1640,15 @@ dependencies = [
"digest", "digest",
] ]
[[package]]
name = "sharded-slab"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
[[package]] [[package]]
name = "size_format" name = "size_format"
version = "1.0.2" version = "1.0.2"
@ -1757,15 +1763,6 @@ dependencies = [
"windows-sys", "windows-sys",
] ]
[[package]]
name = "termcolor"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
dependencies = [
"winapi-util",
]
[[package]] [[package]]
name = "thiserror" name = "thiserror"
version = "1.0.50" version = "1.0.50"
@ -1786,6 +1783,16 @@ dependencies = [
"syn", "syn",
] ]
[[package]]
name = "thread_local"
version = "1.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
dependencies = [
"cfg-if",
"once_cell",
]
[[package]] [[package]]
name = "tinyvec" name = "tinyvec"
version = "1.6.0" version = "1.6.0"
@ -1911,9 +1918,21 @@ checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
dependencies = [ dependencies = [
"log", "log",
"pin-project-lite", "pin-project-lite",
"tracing-attributes",
"tracing-core", "tracing-core",
] ]
[[package]]
name = "tracing-attributes"
version = "0.1.27"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]] [[package]]
name = "tracing-core" name = "tracing-core"
version = "0.1.32" version = "0.1.32"
@ -1921,6 +1940,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"valuable",
]
[[package]]
name = "tracing-log"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
dependencies = [
"log",
"once_cell",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
] ]
[[package]] [[package]]
@ -1994,6 +2043,12 @@ dependencies = [
"getrandom", "getrandom",
] ]
[[package]]
name = "valuable"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
[[package]] [[package]]
name = "vcpkg" name = "vcpkg"
version = "0.2.15" version = "0.2.15"
@ -2119,15 +2174,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "winapi-x86_64-pc-windows-gnu" name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"

View file

@ -1,6 +1,9 @@
- [ ] when we have the whole torrent, there's no point talking to peers that also have the whole torrent and keep reconnecting to them. - [ ] when we have the whole torrent, there's no point talking to peers that also have the whole torrent and keep reconnecting to them.
- [ ] per-file stats - [ ] per-file stats
- [ ] per-peer stats - [ ] per-peer stats
- [ ] use some concurrent hashmap e.g. flurry or dashmap
- [x] tracing instead of logging. Debugging peers: RUST_LOG=[{peer=.*}]=debug
test-log for tests
someday: someday:
- [ ] cancellation from the client-side for the lib (i.e. stop the torrent manager) - [ ] cancellation from the client-side for the lib (i.e. stop the torrent manager)

View file

@ -25,8 +25,7 @@ hex = "0.4"
bencode = {path = "../bencode", default-features=false, package="librqbit-bencode", version="2.2.1"} bencode = {path = "../bencode", default-features=false, package="librqbit-bencode", version="2.2.1"}
anyhow = "1" anyhow = "1"
parking_lot = "0.12" parking_lot = "0.12"
log = "0.4" tracing = "0.1"
pretty_env_logger = "0.5"
futures = "0.3" futures = "0.3"
rand = "0.8" rand = "0.8"
indexmap = "2" indexmap = "2"

View file

@ -17,7 +17,6 @@ use bencode::ByteString;
use futures::{stream::FuturesUnordered, Stream, StreamExt}; use futures::{stream::FuturesUnordered, Stream, StreamExt};
use indexmap::IndexSet; use indexmap::IndexSet;
use librqbit_core::{id20::Id20, peer_id::generate_peer_id}; use librqbit_core::{id20::Id20, peer_id::generate_peer_id};
use log::{debug, info, trace, warn};
use parking_lot::RwLock; use parking_lot::RwLock;
use rand::Rng; use rand::Rng;
use serde::Serialize; use serde::Serialize;
@ -26,6 +25,7 @@ use tokio::{
sync::mpsc::{channel, unbounded_channel, Sender, UnboundedReceiver, UnboundedSender}, sync::mpsc::{channel, unbounded_channel, Sender, UnboundedReceiver, UnboundedSender},
}; };
use tokio_stream::wrappers::{errors::BroadcastStreamRecvError, BroadcastStream}; use tokio_stream::wrappers::{errors::BroadcastStreamRecvError, BroadcastStream};
use tracing::{debug, info, trace, warn};
#[derive(Debug, Serialize)] #[derive(Debug, Serialize)]
pub struct DhtStats { pub struct DhtStats {
@ -449,7 +449,7 @@ async fn run_framer(
Err(_) => break, Err(_) => break,
} }
} }
Err(e) => log::debug!("{}: error deserializing incoming message: {}", addr, e), Err(e) => debug!("{}: error deserializing incoming message: {}", addr, e),
} }
} }
Err::<(), _>(anyhow::anyhow!( Err::<(), _>(anyhow::anyhow!(

View file

@ -2,13 +2,11 @@ use std::{str::FromStr, time::Duration};
use anyhow::Context; use anyhow::Context;
use librqbit_dht::{Dht, Id20}; use librqbit_dht::{Dht, Id20};
use log::info;
use tokio_stream::StreamExt; use tokio_stream::StreamExt;
use tracing::info;
#[tokio::main] #[tokio::main]
async fn main() -> anyhow::Result<()> { async fn main() -> anyhow::Result<()> {
pretty_env_logger::init();
let info_hash = Id20::from_str("64a980abe6e448226bb930ba061592e44c3781a1").unwrap(); let info_hash = Id20::from_str("64a980abe6e448226bb930ba061592e44c3781a1").unwrap();
let dht = Dht::new().await.context("error initializing DHT")?; let dht = Dht::new().await.context("error initializing DHT")?;
let mut stream = dht.get_peers(info_hash).await?; let mut stream = dht.get_peers(info_hash).await?;
@ -42,7 +40,7 @@ async fn main() -> anyhow::Result<()> {
let peer_printer = async { let peer_printer = async {
while let Some(peer) = stream.next().await { while let Some(peer) = stream.next().await {
log::info!("peer found: {}", peer) info!("peer found: {}", peer)
} }
Ok(()) Ok(())
}; };

View file

@ -8,8 +8,8 @@ use std::path::{Path, PathBuf};
use std::time::Duration; use std::time::Duration;
use anyhow::Context; use anyhow::Context;
use log::{debug, error, info, trace, warn};
use tokio::spawn; use tokio::spawn;
use tracing::{debug, error, info, trace, warn};
use crate::dht::{Dht, DhtConfig}; use crate::dht::{Dht, DhtConfig};
use crate::routing_table::RoutingTable; use crate::routing_table::RoutingTable;

View file

@ -4,8 +4,8 @@ use std::{
}; };
use librqbit_core::id20::Id20; use librqbit_core::id20::Id20;
use log::debug;
use serde::{ser::SerializeMap, Deserialize, Serialize}; use serde::{ser::SerializeMap, Deserialize, Serialize};
use tracing::debug;
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
enum BucketTreeNodeData { enum BucketTreeNodeData {

View file

@ -43,7 +43,7 @@ byteorder = "1"
bincode = "1" bincode = "1"
bitvec = "1" bitvec = "1"
parking_lot = "0.12" parking_lot = "0.12"
log = "0.4" tracing = "0.1.40"
size_format = "1" size_format = "1"
rand = "0.8" rand = "0.8"
@ -59,4 +59,3 @@ backoff = "0.4.0"
[dev-dependencies] [dev-dependencies]
futures = {version = "0.3"} futures = {version = "0.3"}
pretty_env_logger = "0.5"

View file

@ -1,6 +1,6 @@
use librqbit_core::lengths::{ChunkInfo, Lengths, ValidPieceIndex}; use librqbit_core::lengths::{ChunkInfo, Lengths, ValidPieceIndex};
use log::{debug, info};
use peer_binary_protocol::Piece; use peer_binary_protocol::Piece;
use tracing::{debug, info};
use crate::type_aliases::BF; use crate::type_aliases::BF;

View file

@ -4,7 +4,7 @@ use anyhow::Context;
use buffers::ByteString; use buffers::ByteString;
use futures::{stream::FuturesUnordered, Stream, StreamExt}; use futures::{stream::FuturesUnordered, Stream, StreamExt};
use librqbit_core::torrent_metainfo::TorrentMetaV1Info; use librqbit_core::torrent_metainfo::TorrentMetaV1Info;
use log::debug; use tracing::debug;
use crate::{ use crate::{
peer_connection::PeerConnectionOptions, peer_info_reader, spawn_utils::BlockingSpawner, peer_connection::PeerConnectionOptions, peer_info_reader, spawn_utils::BlockingSpawner,
@ -97,7 +97,7 @@ mod tests {
fn init_logging() { fn init_logging() {
#[allow(unused_must_use)] #[allow(unused_must_use)]
LOG_INIT.call_once(|| { LOG_INIT.call_once(|| {
pretty_env_logger::try_init(); // pretty_env_logger::try_init();
}) })
} }

View file

@ -11,7 +11,7 @@ use librqbit_core::{
lengths::{ChunkInfo, Lengths, ValidPieceIndex}, lengths::{ChunkInfo, Lengths, ValidPieceIndex},
torrent_metainfo::{FileIteratorName, TorrentMetaV1Info}, torrent_metainfo::{FileIteratorName, TorrentMetaV1Info},
}; };
use log::{debug, trace, warn}; use tracing::{debug, trace, warn};
use parking_lot::Mutex; use parking_lot::Mutex;
use peer_binary_protocol::Piece; use peer_binary_protocol::Piece;
use sha1w::ISha1; use sha1w::ISha1;

View file

@ -7,7 +7,7 @@ use dht::{Dht, DhtStats};
use http::StatusCode; use http::StatusCode;
use librqbit_core::id20::Id20; use librqbit_core::id20::Id20;
use librqbit_core::torrent_metainfo::TorrentMetaV1Info; use librqbit_core::torrent_metainfo::TorrentMetaV1Info;
use log::warn; use tracing::{warn, info};
use parking_lot::RwLock; use parking_lot::RwLock;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::net::SocketAddr; use std::net::SocketAddr;
@ -110,7 +110,7 @@ impl HttpApi {
.route("/torrents/:id/stats", get(torrent_stats)) .route("/torrents/:id/stats", get(torrent_stats))
.with_state(state); .with_state(state);
log::info!("starting HTTP server on {}", addr); info!("starting HTTP server on {}", addr);
axum::Server::try_bind(&addr) axum::Server::try_bind(&addr)
.with_context(|| format!("error binding to {addr}"))? .with_context(|| format!("error binding to {addr}"))?
.serve(app.into_make_service()) .serve(app.into_make_service())

View file

@ -5,7 +5,6 @@ pub mod http_api;
pub mod http_api_client; pub mod http_api_client;
mod http_api_error; mod http_api_error;
pub mod peer_connection; pub mod peer_connection;
pub mod peer_handler;
pub mod peer_info_reader; pub mod peer_info_reader;
pub mod peer_state; pub mod peer_state;
pub mod session; pub mod session;

View file

@ -4,13 +4,13 @@ use anyhow::Context;
use buffers::{ByteBuf, ByteString}; use buffers::{ByteBuf, ByteString};
use clone_to_owned::CloneToOwned; use clone_to_owned::CloneToOwned;
use librqbit_core::{id20::Id20, lengths::ChunkInfo, peer_id::try_decode_peer_id}; use librqbit_core::{id20::Id20, lengths::ChunkInfo, peer_id::try_decode_peer_id};
use log::{debug, trace};
use peer_binary_protocol::{ use peer_binary_protocol::{
extended::{handshake::ExtendedHandshake, ExtendedMessage}, extended::{handshake::ExtendedHandshake, ExtendedMessage},
serialize_piece_preamble, Handshake, Message, MessageBorrowed, MessageDeserializeError, serialize_piece_preamble, Handshake, Message, MessageBorrowed, MessageDeserializeError,
MessageOwned, PIECE_MESSAGE_DEFAULT_LEN, MessageOwned, PIECE_MESSAGE_DEFAULT_LEN,
}; };
use tokio::time::timeout; use tokio::time::timeout;
use tracing::{debug, trace};
use crate::spawn_utils::BlockingSpawner; use crate::spawn_utils::BlockingSpawner;
@ -57,10 +57,10 @@ async fn with_timeout<T, E>(
where where
E: Into<anyhow::Error>, E: Into<anyhow::Error>,
{ {
timeout(timeout_value, fut) match timeout(timeout_value, fut).await {
.await Ok(v) => v.map_err(Into::into),
.with_context(|| format!("timeout at {timeout_value:?}"))? Err(_) => anyhow::bail!("timeout at {timeout_value:?}"),
.map_err(|e| e.into()) }
} }
macro_rules! read_one { macro_rules! read_one {
@ -149,11 +149,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
let (h, size) = Handshake::deserialize(&read_buf[..read_so_far]) let (h, size) = Handshake::deserialize(&read_buf[..read_so_far])
.map_err(|e| anyhow::anyhow!("error deserializing handshake: {:?}", e))?; .map_err(|e| anyhow::anyhow!("error deserializing handshake: {:?}", e))?;
debug!( debug!("connected: id={:?}", try_decode_peer_id(Id20(h.peer_id)));
"connected peer {}: {:?}",
self.addr,
try_decode_peer_id(Id20(h.peer_id))
);
if h.info_hash != self.info_hash.0 { if h.info_hash != self.info_hash.0 {
anyhow::bail!("info hash does not match"); anyhow::bail!("info hash does not match");
} }
@ -170,11 +166,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
if supports_extended { if supports_extended {
let my_extended = let my_extended =
Message::Extended(ExtendedMessage::Handshake(ExtendedHandshake::new())); Message::Extended(ExtendedMessage::Handshake(ExtendedHandshake::new()));
trace!( trace!("sending extended handshake: {:?}", &my_extended);
"sending extended handshake to {}: {:?}",
self.addr,
&my_extended
);
my_extended.serialize(&mut write_buf, None).unwrap(); my_extended.serialize(&mut write_buf, None).unwrap();
with_timeout(rwtimeout, conn.write_all(&write_buf)) with_timeout(rwtimeout, conn.write_all(&write_buf))
.await .await
@ -184,7 +176,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
let (extended, size) = read_one!(conn, read_buf, read_so_far, rwtimeout); let (extended, size) = read_one!(conn, read_buf, read_so_far, rwtimeout);
match extended { match extended {
Message::Extended(ExtendedMessage::Handshake(h)) => { Message::Extended(ExtendedMessage::Handshake(h)) => {
trace!("received from {}: {:?}", self.addr, &h); trace!("received: {:?}", &h);
self.handler.on_extended_handshake(&h)?; self.handler.on_extended_handshake(&h)?;
extended_handshake = Some(h.clone_to_owned()) extended_handshake = Some(h.clone_to_owned())
} }
@ -213,7 +205,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
with_timeout(rwtimeout, write_half.write_all(&write_buf[..len])) with_timeout(rwtimeout, write_half.write_all(&write_buf[..len]))
.await .await
.context("error writing bitfield to peer")?; .context("error writing bitfield to peer")?;
debug!("sent bitfield to {}", self.addr); debug!("sent bitfield");
} }
} }
@ -253,7 +245,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
} }
}; };
debug!("sending to {}: {:?}, length={}", self.addr, &req, len); debug!("sending: {:?}, length={}", &req, len);
with_timeout(rwtimeout, write_half.write_all(&write_buf[..len])) with_timeout(rwtimeout, write_half.write_all(&write_buf[..len]))
.await .await
@ -273,7 +265,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
let reader = async move { let reader = async move {
loop { loop {
let (message, size) = read_one!(read_half, read_buf, read_so_far, rwtimeout); let (message, size) = read_one!(read_half, read_buf, read_so_far, rwtimeout);
trace!("received from {}: {:?}", self.addr, &message); trace!("received: {:?}", &message);
self.handler self.handler
.on_received_message(message) .on_received_message(message)
@ -294,7 +286,7 @@ impl<H: PeerConnectionHandler> PeerConnection<H> {
r = reader => {r} r = reader => {r}
r = writer => {r} r = writer => {r}
}; };
debug!("{}: either reader or writer are done, exiting", self.addr); debug!("either reader or writer are done, exiting");
r r
} }
} }

View file

@ -1 +0,0 @@

View file

@ -8,7 +8,6 @@ use librqbit_core::{
lengths::{ceil_div_u64, last_element_size_u64, ChunkInfo}, lengths::{ceil_div_u64, last_element_size_u64, ChunkInfo},
torrent_metainfo::TorrentMetaV1Info, torrent_metainfo::TorrentMetaV1Info,
}; };
use log::debug;
use parking_lot::{Mutex, RwLock}; use parking_lot::{Mutex, RwLock};
use peer_binary_protocol::{ use peer_binary_protocol::{
extended::{handshake::ExtendedHandshake, ut_metadata::UtMetadata, ExtendedMessage}, extended::{handshake::ExtendedHandshake, ut_metadata::UtMetadata, ExtendedMessage},
@ -16,6 +15,7 @@ use peer_binary_protocol::{
}; };
use sha1w::{ISha1, Sha1}; use sha1w::{ISha1, Sha1};
use tokio::sync::mpsc::UnboundedSender; use tokio::sync::mpsc::UnboundedSender;
use tracing::debug;
use crate::{ use crate::{
peer_connection::{ peer_connection::{
@ -238,7 +238,7 @@ mod tests {
fn init_logging() { fn init_logging() {
#[allow(unused_must_use)] #[allow(unused_must_use)]
LOG_INIT.call_once(|| { LOG_INIT.call_once(|| {
pretty_env_logger::try_init(); // pretty_env_logger::try_init();
}) })
} }

View file

@ -8,10 +8,10 @@ use librqbit_core::{
peer_id::generate_peer_id, peer_id::generate_peer_id,
torrent_metainfo::{torrent_from_bytes, TorrentMetaV1Info, TorrentMetaV1Owned}, torrent_metainfo::{torrent_from_bytes, TorrentMetaV1Info, TorrentMetaV1Owned},
}; };
use log::{debug, info, warn};
use parking_lot::RwLock; use parking_lot::RwLock;
use reqwest::Url; use reqwest::Url;
use tokio_stream::StreamExt; use tokio_stream::StreamExt;
use tracing::{debug, info, span, warn, Level};
use crate::{ use crate::{
dht_utils::{read_metainfo_from_peer_receiver, ReadMetainfoResult}, dht_utils::{read_metainfo_from_peer_receiver, ReadMetainfoResult},
@ -402,7 +402,7 @@ impl Session {
} }
if let Some(mut dht_peer_rx) = dht_peer_rx { if let Some(mut dht_peer_rx) = dht_peer_rx {
spawn("DHT peer adder", { spawn(span!(Level::INFO, "dht_peer_adder"), {
let handle = handle.clone(); let handle = handle.clone();
async move { async move {
while let Some(peer) = dht_peer_rx.next().await { while let Some(peer) = dht_peer_rx.next().await {

View file

@ -1,22 +1,22 @@
use std::fmt::Display; use tracing::{debug, error, trace, Instrument};
use log::{debug, error}; pub fn spawn(
span: tracing::Span,
pub fn spawn<N: Display + 'static + Send>(
name: N,
fut: impl std::future::Future<Output = anyhow::Result<()>> + Send + 'static, fut: impl std::future::Future<Output = anyhow::Result<()>> + Send + 'static,
) { ) {
debug!("starting task \"{}\"", &name); let fut = async move {
tokio::spawn(async move { trace!("started");
match fut.await { match fut.await {
Ok(_) => { Ok(_) => {
debug!("task \"{}\" finished", &name); debug!("finished");
} }
Err(e) => { Err(e) => {
error!("error in task \"{}\": {:#}", &name, e) error!("{:#}", e)
} }
} }
}); }
.instrument(span.or_current());
tokio::spawn(fut);
} }
#[derive(Clone, Copy, Debug)] #[derive(Clone, Copy, Debug)]

View file

@ -14,11 +14,11 @@ use librqbit_core::{
id20::Id20, lengths::Lengths, peer_id::generate_peer_id, speed_estimator::SpeedEstimator, id20::Id20, lengths::Lengths, peer_id::generate_peer_id, speed_estimator::SpeedEstimator,
torrent_metainfo::TorrentMetaV1Info, torrent_metainfo::TorrentMetaV1Info,
}; };
use log::{debug, info, warn};
use parking_lot::Mutex; use parking_lot::Mutex;
use reqwest::Url; use reqwest::Url;
use sha1w::Sha1; use sha1w::Sha1;
use size_format::SizeFormatterBinary as SF; use size_format::SizeFormatterBinary as SF;
use tracing::{debug, info, span, warn, Level};
use crate::{ use crate::{
chunk_tracker::ChunkTracker, chunk_tracker::ChunkTracker,
@ -116,9 +116,10 @@ impl TorrentManagerHandle {
pub fn add_tracker(&self, url: Url) -> bool { pub fn add_tracker(&self, url: Url) -> bool {
let mgr = self.manager.clone(); let mgr = self.manager.clone();
if mgr.trackers.lock().insert(url.clone()) { if mgr.trackers.lock().insert(url.clone()) {
spawn(format!("tracker monitor {url}"), async move { spawn(
mgr.single_tracker_monitor(url).await span!(Level::ERROR, "tracker_monitor", url = url.to_string()),
}); async move { mgr.single_tracker_monitor(url).await },
);
true true
} else { } else {
false false
@ -289,7 +290,7 @@ impl TorrentManager {
options, options,
}); });
spawn("speed estimator updater", { spawn(span!(Level::ERROR, "speed_estimator_updater"), {
let state = mgr.state.clone(); let state = mgr.state.clone();
async move { async move {
loop { loop {

View file

@ -23,7 +23,6 @@ use librqbit_core::{
lengths::{ChunkInfo, Lengths, ValidPieceIndex}, lengths::{ChunkInfo, Lengths, ValidPieceIndex},
torrent_metainfo::TorrentMetaV1Info, torrent_metainfo::TorrentMetaV1Info,
}; };
use log::{debug, info, trace, warn};
use parking_lot::{Mutex, RwLock, RwLockReadGuard}; use parking_lot::{Mutex, RwLock, RwLockReadGuard};
use peer_binary_protocol::{ use peer_binary_protocol::{
extended::handshake::ExtendedHandshake, Handshake, Message, MessageOwned, Piece, Request, extended::handshake::ExtendedHandshake, Handshake, Message, MessageOwned, Piece, Request,
@ -37,6 +36,7 @@ use tokio::{
}, },
time::timeout, time::timeout,
}; };
use tracing::{debug, info, span, trace, warn, Level};
use crate::{ use crate::{
chunk_tracker::{ChunkMarkingResult, ChunkTracker}, chunk_tracker::{ChunkMarkingResult, ChunkTracker},
@ -311,7 +311,7 @@ impl TorrentState {
peer_queue_tx, peer_queue_tx,
finished_notify: Notify::new(), finished_notify: Notify::new(),
}); });
spawn("peer adder", { spawn(span!(Level::ERROR, "peer_adder"), {
let state = state.clone(); let state = state.clone();
async move { async move {
loop { loop {
@ -319,47 +319,50 @@ impl TorrentState {
let permit = state.peer_semaphore.acquire().await.unwrap(); let permit = state.peer_semaphore.acquire().await.unwrap();
permit.forget(); permit.forget();
spawn(format!("manage_peer({addr})"), { spawn(
let state = state.clone(); span!(parent: None, Level::ERROR, "manage_peer", peer = addr.to_string()),
async move { {
let rx = state.locked.write().peers.mark_peer_connecting(addr)?; let state = state.clone();
async move {
let rx = state.locked.write().peers.mark_peer_connecting(addr)?;
let handler = PeerHandler { let handler = PeerHandler {
addr, addr,
state: state.clone(), state: state.clone(),
spawner, spawner,
}; };
let options = PeerConnectionOptions { let options = PeerConnectionOptions {
connect_timeout: state.options.peer_connect_timeout, connect_timeout: state.options.peer_connect_timeout,
read_write_timeout: state.options.peer_read_write_timeout, read_write_timeout: state.options.peer_read_write_timeout,
..Default::default() ..Default::default()
}; };
let peer_connection = PeerConnection::new( let peer_connection = PeerConnection::new(
addr, addr,
state.info_hash, state.info_hash,
state.peer_id, state.peer_id,
handler, handler,
Some(options), Some(options),
spawner, spawner,
); );
let res = peer_connection.manage_peer(rx).await; let res = peer_connection.manage_peer(rx).await;
let state = peer_connection.into_handler().state; let state = peer_connection.into_handler().state;
state.peer_semaphore.add_permits(1); state.peer_semaphore.add_permits(1);
match res { match res {
// We disconnected the peer ourselves as we don't need it // We disconnected the peer ourselves as we don't need it
Ok(()) => { Ok(()) => {
state.on_peer_died(addr, None); state.on_peer_died(addr, None);
} }
Err(e) => { Err(e) => {
debug!("error managing peer {}: {:#}", addr, e); debug!("error managing peer: {:#}", e);
state.on_peer_died(addr, Some(e)); state.on_peer_died(addr, Some(e));
}
} }
Ok::<_, anyhow::Error>(())
} }
Ok::<_, anyhow::Error>(()) },
} );
});
} }
} }
}); });
@ -406,7 +409,7 @@ impl TorrentState {
fn reserve_next_needed_piece(&self, peer_handle: PeerHandle) -> Option<ValidPieceIndex> { fn reserve_next_needed_piece(&self, peer_handle: PeerHandle) -> Option<ValidPieceIndex> {
if self.am_i_choked(peer_handle)? { if self.am_i_choked(peer_handle)? {
debug!("we are choked by {}, can't reserve next piece", peer_handle); debug!("we are choked, can't reserve next piece");
return None; return None;
} }
let mut g = self.locked.write(); let mut g = self.locked.write();
@ -459,8 +462,8 @@ impl TorrentState {
// heuristic for "too slow peer" // heuristic for "too slow peer"
if elapsed > avg_time * 10 { if elapsed > avg_time * 10 {
debug!( debug!(
"{} will steal piece {} from {}: elapsed time {:?}, avg piece time: {:?}", "will steal piece {} from {}: elapsed time {:?}, avg piece time: {:?}",
handle, idx, piece_req.peer, elapsed, avg_time idx, piece_req.peer, elapsed, avg_time
); );
piece_req.peer = handle; piece_req.peer = handle;
piece_req.started = Instant::now(); piece_req.started = Instant::now();
@ -487,7 +490,7 @@ impl TorrentState {
let peer = match g.peers.states.get_mut(&handle) { let peer = match g.peers.states.get_mut(&handle) {
Some(peer) => peer, Some(peer) => peer,
None => { None => {
warn!("peer {} was in a wrong state", handle); warn!("peer was in a wrong state, can't set live");
return; return;
} }
}; };
@ -499,6 +502,11 @@ impl TorrentState {
match g.peers.mark_peer_dead(handle) { match g.peers.mark_peer_dead(handle) {
Some(Some(live)) => { Some(Some(live)) => {
for req in live.inflight_requests { for req in live.inflight_requests {
debug!(
"peer dead, marking chunk request cancelled, index={}, chunk={}",
req.piece.get(),
req.chunk
);
g.chunks.mark_chunk_request_cancelled(req.piece, req.chunk); g.chunks.mark_chunk_request_cancelled(req.piece, req.chunk);
} }
} }
@ -509,41 +517,54 @@ impl TorrentState {
} }
if error.is_none() { if error.is_none() {
debug!("peer died without errors, not re-queueing");
return; return;
} }
let backoff = g let backoff = {
.peers let peer = match g.peers.states.get_mut(&handle) {
.states Some(p) => p,
.get_mut(&handle) None => {
.unwrap() warn!("bug: did not find peer in the list");
.stats return;
.backoff }
.next_backoff(); };
peer.stats.backoff.next_backoff()
};
if let Some(dur) = backoff { if let Some(dur) = backoff {
let state = self.clone(); let state = self.clone();
spawn(format!("wait_for_peer({handle}, {dur:?})"), async move { spawn(
tokio::time::sleep(dur).await; span!(
{ parent: None,
let mut g = state.locked.write(); Level::ERROR,
let peer = match g.peers.states.get_mut(&handle) { "wait_for_peer",
Some(p) => p, peer = handle.to_string(),
None => bail!("bug: peer {} disappeared", handle), duration = format!("{dur:?}")
}; ),
match &peer.state { async move {
PeerState::Dead => peer.state = PeerState::Queued, tokio::time::sleep(dur).await;
other => bail!( {
"peer {} in unexpected state: {}. Expected dead", let mut g = state.locked.write();
handle, let peer = match g.peers.states.get_mut(&handle) {
other.name() Some(p) => p,
), None => bail!("bug: peer disappeared"),
};
match &peer.state {
PeerState::Dead => peer.state = PeerState::Queued,
other => bail!(
"peer is in unexpected state: {}. Expected dead",
other.name()
),
}
} }
} state.peer_queue_tx.send(handle)?;
state.peer_queue_tx.send(handle)?; Ok::<_, anyhow::Error>(())
Ok::<_, anyhow::Error>(()) },
}); );
} else { } else {
debug!("dropping peer, backoff exhausted");
g.peers.drop_peer(handle); g.peers.drop_peer(handle);
} }
} }
@ -602,7 +623,12 @@ impl TorrentState {
let mut unordered: FuturesUnordered<_> = futures.into_iter().collect(); let mut unordered: FuturesUnordered<_> = futures.into_iter().collect();
spawn( spawn(
format!("transmit_haves(piece={}, count={})", index, unordered.len()), span!(
Level::ERROR,
"transmit_haves",
piece = index.get(),
count = unordered.len()
),
async move { async move {
while unordered.next().await.is_some() {} while unordered.next().await.is_some() {}
Ok(()) Ok(())
@ -668,30 +694,27 @@ impl PeerConnectionHandler for PeerHandler {
match message { match message {
Message::Request(request) => { Message::Request(request) => {
self.on_download_request(self.addr, request) self.on_download_request(self.addr, request)
.with_context(|| { .context("on_download_request")?;
format!("error handling download request from {}", self.addr)
})?;
} }
Message::Bitfield(b) => self.on_bitfield(self.addr, b.clone_to_owned())?, Message::Bitfield(b) => self
.on_bitfield(self.addr, b.clone_to_owned())
.context("on_bitfield")?,
Message::Choke => self.on_i_am_choked(self.addr), Message::Choke => self.on_i_am_choked(self.addr),
Message::Unchoke => self.on_i_am_unchoked(self.addr), Message::Unchoke => self.on_i_am_unchoked(self.addr),
Message::Interested => self.on_peer_interested(self.addr), Message::Interested => self.on_peer_interested(self.addr),
Message::Piece(piece) => { Message::Piece(piece) => {
self.on_received_piece(self.addr, piece) self.on_received_piece(self.addr, piece)
.context("error in on_received_piece()")?; .context("on_received_piece")?;
} }
Message::KeepAlive => { Message::KeepAlive => {
debug!("keepalive received from {}", self.addr); debug!("keepalive received");
} }
Message::Have(h) => self.on_have(self.addr, h), Message::Have(h) => self.on_have(self.addr, h),
Message::NotInterested => { Message::NotInterested => {
info!("received \"not interested\", but we don't care yet") info!("received \"not interested\", but we don't care yet")
} }
message => { message => {
warn!( warn!("received unsupported message {:?}, ignoring", message);
"{}: received unsupported message {:?}, ignoring",
self.addr, message
);
} }
} }
Ok(()) Ok(())
@ -705,7 +728,7 @@ impl PeerConnectionHandler for PeerHandler {
let g = self.state.locked.read(); let g = self.state.locked.read();
let msg = Message::Bitfield(ByteBuf(g.chunks.get_have_pieces().as_raw_slice())); let msg = Message::Bitfield(ByteBuf(g.chunks.get_have_pieces().as_raw_slice()));
let len = msg.serialize(buf, None).unwrap(); let len = msg.serialize(buf, None).unwrap();
debug!("sending to {}: {:?}, length={}", self.addr, &msg, len); debug!("sending: {:?}, length={}", &msg, len);
Some(len) Some(len)
} }
@ -736,8 +759,8 @@ impl PeerHandler {
Some(p) => p, Some(p) => p,
None => { None => {
anyhow::bail!( anyhow::bail!(
"{}: received {:?}, but it is not a valid chunk request (piece index is invalid). Ignoring.", "received {:?}, but it is not a valid chunk request (piece index is invalid). Ignoring.",
peer_handle, request request
); );
} }
}; };
@ -749,8 +772,8 @@ impl PeerHandler {
Some(d) => d, Some(d) => d,
None => { None => {
anyhow::bail!( anyhow::bail!(
"{}: received {:?}, but it is not a valid chunk request (chunk data is invalid). Ignoring.", "received {:?}, but it is not a valid chunk request (chunk data is invalid). Ignoring.",
peer_handle, request request
); );
} }
}; };
@ -764,19 +787,16 @@ impl PeerHandler {
); );
} }
g.peers.clone_tx(peer_handle).ok_or_else(|| { g.peers
anyhow::anyhow!( .clone_tx(peer_handle)
"peer {} died, dropping chunk that it requested", .context("peer died, dropping chunk that it requested")?
peer_handle
)
})?
}; };
// TODO: this is not super efficient as it does copying multiple times. // TODO: this is not super efficient as it does copying multiple times.
// Theoretically, this could be done in the sending code, so that it reads straight into // Theoretically, this could be done in the sending code, so that it reads straight into
// the send buffer. // the send buffer.
let request = WriterRequest::ReadChunkRequest(chunk_info); let request = WriterRequest::ReadChunkRequest(chunk_info);
debug!("sending to {}: {:?}", peer_handle, &request); debug!("sending {:?}", &request);
Ok::<_, anyhow::Error>(tx.send(request)?) Ok::<_, anyhow::Error>(tx.send(request)?)
} }
@ -789,7 +809,7 @@ impl PeerHandler {
.get_live_mut(handle) .get_live_mut(handle)
.and_then(|l| l.bitfield.as_mut()) .and_then(|l| l.bitfield.as_mut())
{ {
debug!("{}: updated bitfield with have={}", handle, have); debug!("updated bitfield with have={}", have);
bitfield.set(have as usize, true) bitfield.set(have as usize, true)
} }
} }
@ -797,8 +817,7 @@ impl PeerHandler {
fn on_bitfield(&self, handle: PeerHandle, bitfield: ByteString) -> anyhow::Result<()> { fn on_bitfield(&self, handle: PeerHandle, bitfield: ByteString) -> anyhow::Result<()> {
if bitfield.len() != self.state.lengths.piece_bitfield_bytes() { if bitfield.len() != self.state.lengths.piece_bitfield_bytes() {
anyhow::bail!( anyhow::bail!(
"dropping {} as its bitfield has unexpected size. Got {}, expected {}", "dropping peer as its bitfield has unexpected size. Got {}, expected {}",
handle,
bitfield.len(), bitfield.len(),
self.state.lengths.piece_bitfield_bytes(), self.state.lengths.piece_bitfield_bytes(),
); );
@ -816,7 +835,7 @@ impl PeerHandler {
.read() .read()
.peers .peers
.clone_tx(handle) .clone_tx(handle)
.ok_or_else(|| anyhow::anyhow!("peer closed"))?; .context("peer dropped")?;
tx.send(WriterRequest::Message(MessageOwned::Unchoke)) tx.send(WriterRequest::Message(MessageOwned::Unchoke))
.context("peer dropped")?; .context("peer dropped")?;
tx.send(WriterRequest::Message(MessageOwned::NotInterested)) tx.send(WriterRequest::Message(MessageOwned::NotInterested))
@ -826,7 +845,11 @@ impl PeerHandler {
// Additional spawn per peer, not good. // Additional spawn per peer, not good.
spawn( spawn(
format!("peer_chunk_requester({handle})"), span!(
Level::ERROR,
"peer_chunk_requester",
peer = handle.to_string()
),
self.clone().task_peer_chunk_requester(handle), self.clone().task_peer_chunk_requester(handle),
); );
Ok(()) Ok(())
@ -846,7 +869,7 @@ impl PeerHandler {
} }
fn on_i_am_choked(&self, handle: PeerHandle) { fn on_i_am_choked(&self, handle: PeerHandle) {
debug!("we are choked by {}", handle); debug!("we are choked");
self.state self.state
.locked .locked
.write() .write()
@ -855,7 +878,7 @@ impl PeerHandler {
} }
fn on_peer_interested(&self, handle: PeerHandle) { fn on_peer_interested(&self, handle: PeerHandle) {
debug!("peer {} is interested", handle); debug!("peer is interested");
self.state self.state
.locked .locked
.write() .write()
@ -878,7 +901,7 @@ impl PeerHandler {
loop { loop {
match self.state.am_i_choked(handle) { match self.state.am_i_choked(handle) {
Some(true) => { Some(true) => {
debug!("we are choked by {}, can't reserve next piece", handle); debug!("we are choked, can't reserve next piece");
#[allow(unused_must_use)] #[allow(unused_must_use)]
{ {
timeout(Duration::from_secs(60), notify.notified()).await; timeout(Duration::from_secs(60), notify.notified()).await;
@ -895,15 +918,15 @@ impl PeerHandler {
Some(next) => next, Some(next) => next,
None => { None => {
if self.state.get_left_to_download() == 0 { if self.state.get_left_to_download() == 0 {
debug!("{}: nothing left to download, closing requester", handle); debug!("nothing left to download, closing requester");
return Ok(()); return Ok(());
} }
if let Some(piece) = self.state.try_steal_piece(handle) { if let Some(piece) = self.state.try_steal_piece(handle) {
debug!("{}: stole a piece {}", handle, piece); debug!("stole a piece {}", piece);
piece piece
} else { } else {
debug!("no pieces to request from {}", handle); debug!("no pieces to request");
#[allow(unused_must_use)] #[allow(unused_must_use)]
{ {
timeout(Duration::from_secs(60), notify.notified()).await; timeout(Duration::from_secs(60), notify.notified()).await;
@ -935,10 +958,7 @@ impl PeerHandler {
.inflight_requests .inflight_requests
.insert(InflightRequest::from(&chunk)) .insert(InflightRequest::from(&chunk))
{ {
warn!( warn!("probably a bug, we already requested {:?}", chunk);
"{}: probably a bug, we already requested {:?}",
handle, chunk
);
continue; continue;
} }
@ -985,7 +1005,7 @@ impl PeerHandler {
} }
fn on_i_am_unchoked(&self, handle: PeerHandle) { fn on_i_am_unchoked(&self, handle: PeerHandle) {
debug!("we are unchoked by {}", handle); debug!("we are unchoked");
let mut g = self.state.locked.write(); let mut g = self.state.locked.write();
let live = match g.peers.get_live_mut(handle) { let live = match g.peers.get_live_mut(handle) {
Some(live) => live, Some(live) => live,
@ -1004,11 +1024,7 @@ impl PeerHandler {
) { ) {
Some(i) => i, Some(i) => i,
None => { None => {
anyhow::bail!( anyhow::bail!("peer sent us an invalid piece {:?}", &piece,);
"peer {} sent us a piece that is invalid {:?}",
handle,
&piece,
);
} }
}; };
@ -1026,16 +1042,15 @@ impl PeerHandler {
.remove(&InflightRequest::from(&chunk_info)) .remove(&InflightRequest::from(&chunk_info))
{ {
anyhow::bail!( anyhow::bail!(
"peer {} sent us a piece that we did not ask it for. Requested pieces: {:?}. Got: {:?}", handle, &h.inflight_requests, &piece, "peer sent us a piece we did not ask. Requested pieces: {:?}. Got: {:?}",
&h.inflight_requests,
&piece,
); );
} }
let full_piece_download_time = match g.chunks.mark_chunk_downloaded(&piece) { let full_piece_download_time = match g.chunks.mark_chunk_downloaded(&piece) {
Some(ChunkMarkingResult::Completed) => { Some(ChunkMarkingResult::Completed) => {
debug!( debug!("piece={} done, will write and checksum", piece.index,);
"piece={} done by {}, will write and checksum",
piece.index, handle
);
// This will prevent others from stealing it. // This will prevent others from stealing it.
g.peers g.peers
.remove_inflight_piece(chunk_info.piece_index) .remove_inflight_piece(chunk_info.piece_index)
@ -1043,17 +1058,13 @@ impl PeerHandler {
} }
Some(ChunkMarkingResult::PreviouslyCompleted) => { Some(ChunkMarkingResult::PreviouslyCompleted) => {
// TODO: we might need to send cancellations here. // TODO: we might need to send cancellations here.
debug!( debug!("piece={} was done by someone else, ignoring", piece.index,);
"piece={} was done by someone else {}, ignoring",
piece.index, handle
);
return Ok(()); return Ok(());
} }
Some(ChunkMarkingResult::NotCompleted) => None, Some(ChunkMarkingResult::NotCompleted) => None,
None => { None => {
anyhow::bail!( anyhow::bail!(
"bogus data received from {}: {:?}, cannot map this to a chunk, dropping peer", "bogus data received: {:?}, cannot map this to a chunk, dropping peer",
handle,
piece piece
); );
} }
@ -1116,10 +1127,7 @@ impl PeerHandler {
g.peers.reset_peer_backoff(handle); g.peers.reset_peer_backoff(handle);
} }
debug!( debug!("piece={} successfully downloaded and verified", index);
"piece={} successfully downloaded and verified from {}",
index, handle
);
if self.state.get_left_to_download() == 0 { if self.state.get_left_to_download() == 0 {
self.state.finished_notify.notify_waiters(); self.state.finished_notify.notify_waiters();
@ -1130,10 +1138,7 @@ impl PeerHandler {
self.state.maybe_transmit_haves(chunk_info.piece_index); self.state.maybe_transmit_haves(chunk_info.piece_index);
} }
false => { false => {
warn!( warn!("checksum for piece={} did not validate", index,);
"checksum for piece={} did not validate, came from {}",
index, handle
);
self.state self.state
.locked .locked
.write() .write()

View file

@ -21,7 +21,6 @@ hex = "0.4"
anyhow = "1" anyhow = "1"
url = "2" url = "2"
uuid = {version = "1", features = ["v4"]} uuid = {version = "1", features = ["v4"]}
log = "0.4"
parking_lot = "0.12" parking_lot = "0.12"
serde = {version = "1", features=["derive"]} serde = {version = "1", features=["derive"]}
buffers = {path="../buffers", package="librqbit-buffers", version = "2.2.1"} buffers = {path="../buffers", package="librqbit-buffers", version = "2.2.1"}

View file

@ -25,8 +25,8 @@ dht = {path="../dht", package="librqbit-dht", version="2.2.2"}
tokio = {version = "1", features = ["macros", "rt-multi-thread"]} tokio = {version = "1", features = ["macros", "rt-multi-thread"]}
anyhow = "1" anyhow = "1"
clap = {version = "4", features = ["derive", "deprecated"]} clap = {version = "4", features = ["derive", "deprecated"]}
log = "0.4" tracing = "0.1"
pretty_env_logger = "0.5" tracing-subscriber = {version = "0.3", features = ["env-filter"]}
regex = "1" regex = "1"
futures = "0.3" futures = "0.3"
parse_duration = "2" parse_duration = "2"

View file

@ -12,8 +12,8 @@ use librqbit::{
}, },
spawn_utils::{spawn, BlockingSpawner}, spawn_utils::{spawn, BlockingSpawner},
}; };
use log::{error, info, warn};
use size_format::SizeFormatterBinary as SF; use size_format::SizeFormatterBinary as SF;
use tracing::{error, info, span, warn, Level};
#[derive(Debug, Clone, Copy, ValueEnum)] #[derive(Debug, Clone, Copy, ValueEnum)]
enum LogLevel { enum LogLevel {
@ -151,7 +151,13 @@ fn init_logging(opts: &Opts) {
} }
}; };
} }
pretty_env_logger::init();
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
tracing_subscriber::registry()
.with(fmt::layer())
.with(EnvFilter::from_default_env())
.init();
} }
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
@ -258,7 +264,10 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()>
.await .await
.context("error initializing rqbit session")?, .context("error initializing rqbit session")?,
); );
spawn("Stats printer", stats_printer(session.clone())); spawn(
span!(Level::TRACE, "stats_printer"),
stats_printer(session.clone()),
);
let http_api = HttpApi::new(session); let http_api = HttpApi::new(session);
let http_api_listen_addr = opts.http_api_listen_addr; let http_api_listen_addr = opts.http_api_listen_addr;
http_api http_api
@ -331,11 +340,14 @@ async fn async_main(opts: Opts, spawner: BlockingSpawner) -> anyhow::Result<()>
.await .await
.context("error initializing rqbit session")?, .context("error initializing rqbit session")?,
); );
spawn("Stats printer", stats_printer(session.clone())); spawn(
span!(Level::TRACE, "stats_printer"),
stats_printer(session.clone()),
);
let http_api = HttpApi::new(session.clone()); let http_api = HttpApi::new(session.clone());
let http_api_listen_addr = opts.http_api_listen_addr; let http_api_listen_addr = opts.http_api_listen_addr;
spawn( spawn(
"HTTP API", span!(Level::ERROR, "http_api"),
http_api.clone().make_http_api_and_run(http_api_listen_addr), http_api.clone().make_http_api_and_run(http_api_listen_addr),
); );

View file

@ -1,140 +0,0 @@
thread 'rustc' panicked at /rustc/dd430bc8c22f57992ec1457a87437d14283fdd65/compiler/rustc_errors/src/lib.rs:999:33:
Box<dyn Any>
stack backtrace:
0: 0x1059a3dac - std::backtrace::Backtrace::create::he1446a17ed3fb192
1: 0x10edcb134 - <alloc[c2dee6f3963398a2]::boxed::Box<rustc_driver_impl[683555f6943f3d8]::install_ice_hook::{closure#0}> as core[e0b35f7eb9175e97]::ops::function::Fn<(&dyn for<'a, 'b> core[e0b35f7eb9175e97]::ops::function::Fn<(&'a core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo<'b>,), Output = ()> + core[e0b35f7eb9175e97]::marker::Sync + core[e0b35f7eb9175e97]::marker::Send, &core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo)>>::call
2: 0x1059bbca8 - std::panicking::rust_panic_with_hook::h05bd262a58657294
3: 0x10fbffd4c - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}
4: 0x10fbfe448 - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_end_short_backtrace::<std[4d79feac4cea9cd0]::panicking::begin_panic<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}, !>
5: 0x112bec854 - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>
6: 0x10fb1bd68 - <rustc_errors[2754115f20995473]::HandlerInner>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
7: 0x10fb1b92c - <rustc_errors[2754115f20995473]::Handler>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
8: 0x10fbe1584 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}
9: 0x10fbe15b8 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt::<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}
10: 0x10fbdea54 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_context_opt::<rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
11: 0x112bed690 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>
12: 0x10facfd78 - rustc_mir_transform[b0d987c76d7549be]::coroutine::mir_coroutine_witnesses
13: 0x10ffd3d28 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
14: 0x11011dc7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
15: 0x10ff466e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
16: 0x10fee2e08 - rustc_query_system[865695b26f343ed8]::query::plumbing::force_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
17: 0x10ffb0d98 - <rustc_query_impl[6ec06d95fa579ddc]::plumbing::query_callback<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::QueryType>::{closure#0} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_query_system[865695b26f343ed8]::dep_graph::dep_node::DepNode)>>::call_once
18: 0x11005d434 - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_previous_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
19: 0x11005d20c - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
20: 0x10ff14abc - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
21: 0x1101b69c4 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::needs_drop_raw::get_query_incr::__rust_end_short_backtrace
22: 0x11059fd34 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>::needs_drop
23: 0x1105ad520 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::dtorck_constraint_for_ty_inner
24: 0x1105a63e0 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::compute_dropck_outlives_inner
25: 0x11063ac8c - <rustc_infer[8a995808981023bc]::infer::InferCtxtBuilder as rustc_trait_selection[caa1e5098b58bda5]::infer::InferCtxtBuilderExt>::enter_canonical_trait_query::<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::traits::query::DropckOutlivesResult, rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives::{closure#0}>
26: 0x11064c2dc - rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives
27: 0x10ffd09bc - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
28: 0x11011a488 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>)>>::call_once
29: 0x10ff013b0 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
30: 0x110126f34 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::get_query_incr::__rust_end_short_backtrace
31: 0x11047ec08 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
32: 0x10e8aa458 - <rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::QueryTypeOp>::fully_perform_into
33: 0x10e7d0a58 - <rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives> as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::TypeOp>::fully_perform
34: 0x10e7ab9b8 - <rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::LivenessContext>::add_drop_live_facts_for
35: 0x10e7aac64 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::trace
36: 0x10e7e2124 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::generate
37: 0x10e7ad240 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
38: 0x10e93cd7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
39: 0x10e78cfd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
40: 0x10e7840a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
41: 0x10ffcfba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
42: 0x11002f10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
43: 0x10ff8b7a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
44: 0x110035bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
45: 0x10e797140 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
46: 0x10e7b1bdc - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::prove_closure_bounds
47: 0x10e7b5090 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::check_rvalue
48: 0x10e7b8464 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::typeck_mir
49: 0x10e7acde0 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
50: 0x10e93cd7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
51: 0x10e78cfd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
52: 0x10e7840a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
53: 0x10ffcfba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
54: 0x11002f10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
55: 0x10ff8b7a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
56: 0x110035bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
57: 0x10f057fe8 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
58: 0x10f06a940 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::opaque::find_opaque_ty_constraints_for_rpit
59: 0x10ffd075c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
60: 0x11011a304 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
61: 0x10ff466e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
62: 0x1100d219c - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::get_query_incr::__rust_end_short_backtrace
63: 0x10f000e20 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
64: 0x10f019a78 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::type_of
65: 0x10ffd5210 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
66: 0x11012062c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
67: 0x10ff466e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
68: 0x1101568b0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::get_query_incr::__rust_end_short_backtrace
69: 0x10f8fa314 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
70: 0x10f8e7f94 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
71: 0x10f8e8080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
72: 0x10f8e82c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
73: 0x10f8eacdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
74: 0x10f888ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
75: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
76: 0x10f7c7fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
77: 0x10f888f1c - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
78: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
79: 0x10f8e82c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
80: 0x10f8eacdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
81: 0x10f888ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
82: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
83: 0x10f8e7fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
84: 0x10f8e8080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
85: 0x10f8e82c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
86: 0x10f8eacdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
87: 0x10f888ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
88: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
89: 0x10f7c7fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
90: 0x10f888e74 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
91: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
92: 0x10f8eacdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
93: 0x10f888eb4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
94: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
95: 0x10f8e82c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
96: 0x10f8eacdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
97: 0x10f888ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
98: 0x10f8e8060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
99: 0x10f8e7fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
100: 0x10f780f54 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>::try_expand_impl_trait_type
101: 0x10f01034c - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_item_type
102: 0x10f0169cc - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_mod_item_types
103: 0x10ffd292c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>
104: 0x1101b0bf8 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId)>>::call_once
105: 0x10ff2d2d4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
106: 0x110158cb0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::get_query_incr::__rust_end_short_backtrace
107: 0x10f0c2914 - <rustc_middle[c4367cd1cb8e0dc9]::hir::map::Map>::for_each_module::<rustc_hir_analysis[c19c0bfd1608da07]::check_crate::{closure#5}::{closure#0}>
108: 0x10f094b04 - rustc_hir_analysis[c19c0bfd1608da07]::check_crate
109: 0x10f51d094 - rustc_interface[fd51d116160c92d2]::passes::analysis
110: 0x10ffd5238 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>
111: 0x110155f7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, ())>>::call_once
112: 0x10feeeec4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::SingleCache<rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
113: 0x11019b9d8 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
114: 0x10edad124 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}::{closure#6}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
115: 0x10ed3f4f4 - <rustc_interface[fd51d116160c92d2]::interface::Compiler>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}, core[e0b35f7eb9175e97]::result::Result<core[e0b35f7eb9175e97]::option::Option<rustc_interface[fd51d116160c92d2]::queries::Linker>, rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
116: 0x10edab4dc - rustc_span[cc43194fc10ba92f]::set_source_map::<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
117: 0x10edb3c5c - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
118: 0x10ed9b854 - <<std[4d79feac4cea9cd0]::thread::Builder>::spawn_unchecked_<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#1} as core[e0b35f7eb9175e97]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
119: 0x1059c3ea4 - std::sys::unix::thread::Thread::new::thread_start::hc8d37e25d4657683
120: 0x18c159034 - __pthread_joiner_wake
rustc version: 1.76.0-nightly (dd430bc8c 2023-11-14)
platform: aarch64-apple-darwin
query stack during panic:
#0 [mir_coroutine_witnesses] coroutine witness types for `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}::{closure#3}`
#1 [needs_drop_raw] computing whether `{coroutine witness@crates/librqbit/src/peer_connection.rs:202:22: 268:10}` needs drop
#2 [dropck_outlives] computing dropck types for `{async block@crates/librqbit/src/peer_connection.rs:202:22: 268:10}`
#3 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}`
#4 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer`
#5 [type_of_opaque] computing type of opaque `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#6 [type_of] computing type of `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#7 [check_mod_item_types] checking item types in module `dht_utils`
#8 [analysis] running analysis passes on this crate
end of query stack

View file

@ -1,140 +0,0 @@
thread 'rustc' panicked at /rustc/dd430bc8c22f57992ec1457a87437d14283fdd65/compiler/rustc_errors/src/lib.rs:999:33:
Box<dyn Any>
stack backtrace:
0: 0x10470fdac - std::backtrace::Backtrace::create::he1446a17ed3fb192
1: 0x10db37134 - <alloc[c2dee6f3963398a2]::boxed::Box<rustc_driver_impl[683555f6943f3d8]::install_ice_hook::{closure#0}> as core[e0b35f7eb9175e97]::ops::function::Fn<(&dyn for<'a, 'b> core[e0b35f7eb9175e97]::ops::function::Fn<(&'a core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo<'b>,), Output = ()> + core[e0b35f7eb9175e97]::marker::Sync + core[e0b35f7eb9175e97]::marker::Send, &core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo)>>::call
2: 0x104727ca8 - std::panicking::rust_panic_with_hook::h05bd262a58657294
3: 0x10e96bd4c - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}
4: 0x10e96a448 - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_end_short_backtrace::<std[4d79feac4cea9cd0]::panicking::begin_panic<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}, !>
5: 0x111958854 - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>
6: 0x10e887d68 - <rustc_errors[2754115f20995473]::HandlerInner>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
7: 0x10e88792c - <rustc_errors[2754115f20995473]::Handler>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
8: 0x10e94d584 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}
9: 0x10e94d5b8 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt::<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}
10: 0x10e94aa54 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_context_opt::<rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
11: 0x111959690 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>
12: 0x10e83bd78 - rustc_mir_transform[b0d987c76d7549be]::coroutine::mir_coroutine_witnesses
13: 0x10ed3fd28 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
14: 0x10ee89c7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
15: 0x10ecb26e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
16: 0x10ec4ee08 - rustc_query_system[865695b26f343ed8]::query::plumbing::force_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
17: 0x10ed1cd98 - <rustc_query_impl[6ec06d95fa579ddc]::plumbing::query_callback<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::QueryType>::{closure#0} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_query_system[865695b26f343ed8]::dep_graph::dep_node::DepNode)>>::call_once
18: 0x10edc9434 - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_previous_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
19: 0x10edc920c - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
20: 0x10ec80abc - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
21: 0x10ef229c4 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::needs_drop_raw::get_query_incr::__rust_end_short_backtrace
22: 0x10f30bd34 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>::needs_drop
23: 0x10f319520 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::dtorck_constraint_for_ty_inner
24: 0x10f3123e0 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::compute_dropck_outlives_inner
25: 0x10f3a6c8c - <rustc_infer[8a995808981023bc]::infer::InferCtxtBuilder as rustc_trait_selection[caa1e5098b58bda5]::infer::InferCtxtBuilderExt>::enter_canonical_trait_query::<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::traits::query::DropckOutlivesResult, rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives::{closure#0}>
26: 0x10f3b82dc - rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives
27: 0x10ed3c9bc - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
28: 0x10ee86488 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>)>>::call_once
29: 0x10ec6d3b0 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
30: 0x10ee92f34 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::get_query_incr::__rust_end_short_backtrace
31: 0x10f1eac08 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
32: 0x10d616458 - <rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::QueryTypeOp>::fully_perform_into
33: 0x10d53ca58 - <rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives> as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::TypeOp>::fully_perform
34: 0x10d5179b8 - <rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::LivenessContext>::add_drop_live_facts_for
35: 0x10d516c64 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::trace
36: 0x10d54e124 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::generate
37: 0x10d519240 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
38: 0x10d6a8d7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
39: 0x10d4f8fd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
40: 0x10d4f00a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
41: 0x10ed3bba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
42: 0x10ed9b10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
43: 0x10ecf77a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
44: 0x10eda1bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
45: 0x10d503140 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
46: 0x10d51dbdc - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::prove_closure_bounds
47: 0x10d521090 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::check_rvalue
48: 0x10d524464 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::typeck_mir
49: 0x10d518de0 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
50: 0x10d6a8d7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
51: 0x10d4f8fd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
52: 0x10d4f00a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
53: 0x10ed3bba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
54: 0x10ed9b10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
55: 0x10ecf77a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
56: 0x10eda1bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
57: 0x10ddc3fe8 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
58: 0x10ddd6940 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::opaque::find_opaque_ty_constraints_for_rpit
59: 0x10ed3c75c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
60: 0x10ee86304 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
61: 0x10ecb26e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
62: 0x10ee3e19c - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::get_query_incr::__rust_end_short_backtrace
63: 0x10dd6ce20 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
64: 0x10dd85a78 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::type_of
65: 0x10ed41210 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
66: 0x10ee8c62c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
67: 0x10ecb26e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
68: 0x10eec28b0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::get_query_incr::__rust_end_short_backtrace
69: 0x10e666314 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
70: 0x10e653f94 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
71: 0x10e654080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
72: 0x10e6542c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
73: 0x10e656cdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
74: 0x10e5f4ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
75: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
76: 0x10e533fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
77: 0x10e5f4f1c - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
78: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
79: 0x10e6542c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
80: 0x10e656cdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
81: 0x10e5f4ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
82: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
83: 0x10e653fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
84: 0x10e654080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
85: 0x10e6542c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
86: 0x10e656cdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
87: 0x10e5f4ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
88: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
89: 0x10e533fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
90: 0x10e5f4e74 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
91: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
92: 0x10e656cdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
93: 0x10e5f4eb4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
94: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
95: 0x10e6542c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
96: 0x10e656cdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
97: 0x10e5f4ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
98: 0x10e654060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
99: 0x10e653fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
100: 0x10e4ecf54 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>::try_expand_impl_trait_type
101: 0x10dd7c34c - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_item_type
102: 0x10dd829cc - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_mod_item_types
103: 0x10ed3e92c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>
104: 0x10ef1cbf8 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId)>>::call_once
105: 0x10ec992d4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
106: 0x10eec4cb0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::get_query_incr::__rust_end_short_backtrace
107: 0x10de2e914 - <rustc_middle[c4367cd1cb8e0dc9]::hir::map::Map>::for_each_module::<rustc_hir_analysis[c19c0bfd1608da07]::check_crate::{closure#5}::{closure#0}>
108: 0x10de00b04 - rustc_hir_analysis[c19c0bfd1608da07]::check_crate
109: 0x10e289094 - rustc_interface[fd51d116160c92d2]::passes::analysis
110: 0x10ed41238 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>
111: 0x10eec1f7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, ())>>::call_once
112: 0x10ec5aec4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::SingleCache<rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
113: 0x10ef079d8 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
114: 0x10db19124 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}::{closure#6}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
115: 0x10daab4f4 - <rustc_interface[fd51d116160c92d2]::interface::Compiler>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}, core[e0b35f7eb9175e97]::result::Result<core[e0b35f7eb9175e97]::option::Option<rustc_interface[fd51d116160c92d2]::queries::Linker>, rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
116: 0x10db174dc - rustc_span[cc43194fc10ba92f]::set_source_map::<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
117: 0x10db1fc5c - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
118: 0x10db07854 - <<std[4d79feac4cea9cd0]::thread::Builder>::spawn_unchecked_<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#1} as core[e0b35f7eb9175e97]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
119: 0x10472fea4 - std::sys::unix::thread::Thread::new::thread_start::hc8d37e25d4657683
120: 0x18c159034 - __pthread_joiner_wake
rustc version: 1.76.0-nightly (dd430bc8c 2023-11-14)
platform: aarch64-apple-darwin
query stack during panic:
#0 [mir_coroutine_witnesses] coroutine witness types for `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}::{closure#3}`
#1 [needs_drop_raw] computing whether `{coroutine witness@crates/librqbit/src/peer_connection.rs:202:22: 268:10}` needs drop
#2 [dropck_outlives] computing dropck types for `{async block@crates/librqbit/src/peer_connection.rs:202:22: 268:10}`
#3 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}`
#4 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer`
#5 [type_of_opaque] computing type of opaque `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#6 [type_of] computing type of `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#7 [check_mod_item_types] checking item types in module `dht_utils`
#8 [analysis] running analysis passes on this crate
end of query stack

View file

@ -1,140 +0,0 @@
thread 'rustc' panicked at /rustc/dd430bc8c22f57992ec1457a87437d14283fdd65/compiler/rustc_errors/src/lib.rs:999:33:
Box<dyn Any>
stack backtrace:
0: 0x1026c3dac - std::backtrace::Backtrace::create::he1446a17ed3fb192
1: 0x10baeb134 - <alloc[c2dee6f3963398a2]::boxed::Box<rustc_driver_impl[683555f6943f3d8]::install_ice_hook::{closure#0}> as core[e0b35f7eb9175e97]::ops::function::Fn<(&dyn for<'a, 'b> core[e0b35f7eb9175e97]::ops::function::Fn<(&'a core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo<'b>,), Output = ()> + core[e0b35f7eb9175e97]::marker::Sync + core[e0b35f7eb9175e97]::marker::Send, &core[e0b35f7eb9175e97]::panic::panic_info::PanicInfo)>>::call
2: 0x1026dbca8 - std::panicking::rust_panic_with_hook::h05bd262a58657294
3: 0x10c91fd4c - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}
4: 0x10c91e448 - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_end_short_backtrace::<std[4d79feac4cea9cd0]::panicking::begin_panic<rustc_errors[2754115f20995473]::ExplicitBug>::{closure#0}, !>
5: 0x10f90c854 - std[4d79feac4cea9cd0]::panicking::begin_panic::<rustc_errors[2754115f20995473]::ExplicitBug>
6: 0x10c83bd68 - <rustc_errors[2754115f20995473]::HandlerInner>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
7: 0x10c83b92c - <rustc_errors[2754115f20995473]::Handler>::span_bug::<rustc_span[cc43194fc10ba92f]::span_encoding::Span, alloc[c2dee6f3963398a2]::string::String>
8: 0x10c901584 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}
9: 0x10c9015b8 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt::<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}
10: 0x10c8fea54 - rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_context_opt::<rustc_middle[c4367cd1cb8e0dc9]::ty::context::tls::with_opt<rustc_middle[c4367cd1cb8e0dc9]::util::bug::opt_span_bug_fmt<rustc_span[cc43194fc10ba92f]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
11: 0x10f90d690 - rustc_middle[c4367cd1cb8e0dc9]::util::bug::span_bug_fmt::<rustc_span[cc43194fc10ba92f]::span_encoding::Span>
12: 0x10c7efd78 - rustc_mir_transform[b0d987c76d7549be]::coroutine::mir_coroutine_witnesses
13: 0x10ccf3d28 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
14: 0x10ce3dc7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
15: 0x10cc666e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
16: 0x10cc02e08 - rustc_query_system[865695b26f343ed8]::query::plumbing::force_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
17: 0x10ccd0d98 - <rustc_query_impl[6ec06d95fa579ddc]::plumbing::query_callback<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_coroutine_witnesses::QueryType>::{closure#0} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_query_system[865695b26f343ed8]::dep_graph::dep_node::DepNode)>>::call_once
18: 0x10cd7d434 - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_previous_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
19: 0x10cd7d20c - <rustc_query_system[865695b26f343ed8]::dep_graph::graph::DepGraphData<rustc_middle[c4367cd1cb8e0dc9]::dep_graph::DepsType>>::try_mark_green::<rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt>
20: 0x10cc34abc - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
21: 0x10ced69c4 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::needs_drop_raw::get_query_incr::__rust_end_short_backtrace
22: 0x10d2bfd34 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>::needs_drop
23: 0x10d2cd520 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::dtorck_constraint_for_ty_inner
24: 0x10d2c63e0 - rustc_trait_selection[caa1e5098b58bda5]::traits::query::dropck_outlives::compute_dropck_outlives_inner
25: 0x10d35ac8c - <rustc_infer[8a995808981023bc]::infer::InferCtxtBuilder as rustc_trait_selection[caa1e5098b58bda5]::infer::InferCtxtBuilderExt>::enter_canonical_trait_query::<rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>, rustc_middle[c4367cd1cb8e0dc9]::traits::query::DropckOutlivesResult, rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives::{closure#0}>
26: 0x10d36c2dc - rustc_traits[56979a00368fe7bc]::dropck_outlives::dropck_outlives
27: 0x10ccf09bc - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
28: 0x10ce3a488 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>)>>::call_once
29: 0x10cc213b0 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
30: 0x10ce46f34 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::dropck_outlives::get_query_incr::__rust_end_short_backtrace
31: 0x10d19ec08 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_type_ir[9486e74e44844ae3]::canonical::Canonical<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty>>, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
32: 0x10b5ca458 - <rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::QueryTypeOp>::fully_perform_into
33: 0x10b4f0a58 - <rustc_middle[c4367cd1cb8e0dc9]::ty::ParamEnvAnd<rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::outlives::DropckOutlives> as rustc_trait_selection[caa1e5098b58bda5]::traits::query::type_op::TypeOp>::fully_perform
34: 0x10b4cb9b8 - <rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::LivenessContext>::add_drop_live_facts_for
35: 0x10b4cac64 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::trace::trace
36: 0x10b502124 - rustc_borrowck[288b2637815caa8b]::type_check::liveness::generate
37: 0x10b4cd240 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
38: 0x10b65cd7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
39: 0x10b4acfd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
40: 0x10b4a40a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
41: 0x10ccefba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
42: 0x10cd4f10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
43: 0x10ccab7a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
44: 0x10cd55bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
45: 0x10b4b7140 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
46: 0x10b4d1bdc - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::prove_closure_bounds
47: 0x10b4d5090 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::check_rvalue
48: 0x10b4d8464 - <rustc_borrowck[288b2637815caa8b]::type_check::TypeChecker>::typeck_mir
49: 0x10b4ccde0 - rustc_borrowck[288b2637815caa8b]::type_check::type_check
50: 0x10b65cd7c - rustc_borrowck[288b2637815caa8b]::nll::compute_regions
51: 0x10b4acfd0 - rustc_borrowck[288b2637815caa8b]::do_mir_borrowck
52: 0x10b4a40a0 - rustc_borrowck[288b2637815caa8b]::mir_borrowck
53: 0x10ccefba0 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
54: 0x10cd4f10c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalDefId)>>::call_once
55: 0x10ccab7a8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
56: 0x10cd55bc0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
57: 0x10bd77fe8 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::VecCache<rustc_span[cc43194fc10ba92f]::def_id::LocalDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
58: 0x10bd8a940 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::opaque::find_opaque_ty_constraints_for_rpit
59: 0x10ccf075c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
60: 0x10ce3a304 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
61: 0x10cc666e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
62: 0x10cdf219c - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of_opaque::get_query_incr::__rust_end_short_backtrace
63: 0x10bd20e20 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
64: 0x10bd39a78 - rustc_hir_analysis[c19c0bfd1608da07]::collect::type_of::type_of
65: 0x10ccf5210 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>
66: 0x10ce4062c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::DefId)>>::call_once
67: 0x10cc666e8 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
68: 0x10ce768b0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::type_of::get_query_incr::__rust_end_short_backtrace
69: 0x10c61a314 - rustc_middle[c4367cd1cb8e0dc9]::query::plumbing::query_get_at::<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::DefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 8usize]>>>
70: 0x10c607f94 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
71: 0x10c608080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
72: 0x10c6082c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
73: 0x10c60acdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
74: 0x10c5a8ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
75: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
76: 0x10c4e7fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
77: 0x10c5a8f1c - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
78: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
79: 0x10c6082c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
80: 0x10c60acdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
81: 0x10c5a8ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
82: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
83: 0x10c607fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
84: 0x10c608080 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
85: 0x10c6082c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
86: 0x10c60acdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
87: 0x10c5a8ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
88: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
89: 0x10c4e7fcc - <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::Ty> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
90: 0x10c5a8e74 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
91: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
92: 0x10c60acdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
93: 0x10c5a8eb4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
94: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
95: 0x10c6082c8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
96: 0x10c60acdc - rustc_middle[c4367cd1cb8e0dc9]::ty::util::fold_list::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander, rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg, <&rustc_middle[c4367cd1cb8e0dc9]::ty::list::List<rustc_middle[c4367cd1cb8e0dc9]::ty::generic_args::GenericArg> as rustc_type_ir[9486e74e44844ae3]::fold::TypeFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_fold_with<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::{closure#0}>
97: 0x10c5a8ed8 - <rustc_middle[c4367cd1cb8e0dc9]::ty::Ty as rustc_type_ir[9486e74e44844ae3]::fold::TypeSuperFoldable<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::try_super_fold_with::<rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>
98: 0x10c608060 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander as rustc_type_ir[9486e74e44844ae3]::fold::TypeFolder<rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>>::fold_ty
99: 0x10c607fc4 - <rustc_middle[c4367cd1cb8e0dc9]::ty::util::OpaqueTypeExpander>::expand_opaque_ty
100: 0x10c4a0f54 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt>::try_expand_impl_trait_type
101: 0x10bd3034c - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_item_type
102: 0x10bd369cc - rustc_hir_analysis[c19c0bfd1608da07]::check::check::check_mod_item_types
103: 0x10ccf292c - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>
104: 0x10ced0bf8 - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId)>>::call_once
105: 0x10cc4d2d4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::DefaultCache<rustc_span[cc43194fc10ba92f]::def_id::LocalModDefId, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 0usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
106: 0x10ce78cb0 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::check_mod_item_types::get_query_incr::__rust_end_short_backtrace
107: 0x10bde2914 - <rustc_middle[c4367cd1cb8e0dc9]::hir::map::Map>::for_each_module::<rustc_hir_analysis[c19c0bfd1608da07]::check_crate::{closure#5}::{closure#0}>
108: 0x10bdb4b04 - rustc_hir_analysis[c19c0bfd1608da07]::check_crate
109: 0x10c23d094 - rustc_interface[fd51d116160c92d2]::passes::analysis
110: 0x10ccf5238 - rustc_query_impl[6ec06d95fa579ddc]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>
111: 0x10ce75f7c - <rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::dynamic_query::{closure#2} as core[e0b35f7eb9175e97]::ops::function::FnOnce<(rustc_middle[c4367cd1cb8e0dc9]::ty::context::TyCtxt, ())>>::call_once
112: 0x10cc0eec4 - rustc_query_system[865695b26f343ed8]::query::plumbing::try_execute_query::<rustc_query_impl[6ec06d95fa579ddc]::DynamicConfig<rustc_query_system[865695b26f343ed8]::query::caches::SingleCache<rustc_middle[c4367cd1cb8e0dc9]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[6ec06d95fa579ddc]::plumbing::QueryCtxt, true>
113: 0x10cebb9d8 - rustc_query_impl[6ec06d95fa579ddc]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
114: 0x10bacd124 - <rustc_middle[c4367cd1cb8e0dc9]::ty::context::GlobalCtxt>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}::{closure#6}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
115: 0x10ba5f4f4 - <rustc_interface[fd51d116160c92d2]::interface::Compiler>::enter::<rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}::{closure#2}, core[e0b35f7eb9175e97]::result::Result<core[e0b35f7eb9175e97]::option::Option<rustc_interface[fd51d116160c92d2]::queries::Linker>, rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
116: 0x10bacb4dc - rustc_span[cc43194fc10ba92f]::set_source_map::<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
117: 0x10bad3c5c - std[4d79feac4cea9cd0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>
118: 0x10babb854 - <<std[4d79feac4cea9cd0]::thread::Builder>::spawn_unchecked_<rustc_interface[fd51d116160c92d2]::util::run_in_thread_with_globals<rustc_interface[fd51d116160c92d2]::util::run_in_thread_pool_with_globals<rustc_interface[fd51d116160c92d2]::interface::run_compiler<core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>, rustc_driver_impl[683555f6943f3d8]::run_compiler::{closure#1}>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e0b35f7eb9175e97]::result::Result<(), rustc_span[cc43194fc10ba92f]::ErrorGuaranteed>>::{closure#1} as core[e0b35f7eb9175e97]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
119: 0x1026e3ea4 - std::sys::unix::thread::Thread::new::thread_start::hc8d37e25d4657683
120: 0x18c159034 - __pthread_joiner_wake
rustc version: 1.76.0-nightly (dd430bc8c 2023-11-14)
platform: aarch64-apple-darwin
query stack during panic:
#0 [mir_coroutine_witnesses] coroutine witness types for `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}::{closure#3}`
#1 [needs_drop_raw] computing whether `{coroutine witness@crates/librqbit/src/peer_connection.rs:202:22: 268:10}` needs drop
#2 [dropck_outlives] computing dropck types for `{async block@crates/librqbit/src/peer_connection.rs:202:22: 268:10}`
#3 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{closure#0}`
#4 [mir_borrowck] borrow-checking `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer`
#5 [type_of_opaque] computing type of opaque `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#6 [type_of] computing type of `peer_connection::<impl at crates/librqbit/src/peer_connection.rs:92:1: 92:49>::manage_peer::{opaque#0}`
#7 [check_mod_item_types] checking item types in module `dht_utils`
#8 [analysis] running analysis passes on this crate
end of query stack