mirror of
https://github.com/chatmail/core.git
synced 2026-04-28 19:06:35 +03:00
try to fix lifetime error
This commit is contained in:
4
Cargo.lock
generated
4
Cargo.lock
generated
@@ -871,9 +871,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "core-foundation-sys"
|
||||
version = "0.8.5"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a385f5d34e5eff161df2369056a3fd194fcabd8a64ce0eed02de09fcb3203434"
|
||||
checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
|
||||
@@ -474,10 +474,10 @@ async fn transfer_from_provider(context: &Context, ticket: &Ticket) -> Result<()
|
||||
let progress = ProgressEmitter::new(0, ReceiveProgress::max_blob_progress());
|
||||
spawn_progress_proxy(context.clone(), progress.subscribe());
|
||||
|
||||
let jobs = Mutex::new(JoinSet::default());
|
||||
let jobs = Arc::new(Mutex::new(JoinSet::default()));
|
||||
|
||||
// Perform the transfer.
|
||||
let stats = run_get_request(context, &progress, &jobs, ticket.clone()).await?;
|
||||
let stats = run_get_request(context, &progress, jobs.clone(), ticket.clone()).await?;
|
||||
|
||||
let mut jobs = jobs.lock().await;
|
||||
while let Some(job) = jobs.join_next().await {
|
||||
@@ -496,7 +496,7 @@ async fn transfer_from_provider(context: &Context, ticket: &Ticket) -> Result<()
|
||||
async fn run_get_request(
|
||||
context: &Context,
|
||||
progress: &ProgressEmitter,
|
||||
jobs: &Mutex<JoinSet<()>>,
|
||||
jobs: Arc<Mutex<JoinSet<()>>>,
|
||||
ticket: Ticket,
|
||||
) -> anyhow::Result<Stats> {
|
||||
// DERP usage for NAT traversal and relay are currently disabled.
|
||||
@@ -511,6 +511,8 @@ async fn run_get_request(
|
||||
let connected = initial.next().await?;
|
||||
context.emit_event(ReceiveProgress::Connected.into());
|
||||
|
||||
let rt = runtime::Handle::from_currrent(1)?;
|
||||
|
||||
// we assume that the request includes the entire collection
|
||||
let (mut next, _root, collection) = {
|
||||
let fsm::ConnectedNext::StartRoot(sc) = connected.next().await? else {
|
||||
@@ -541,7 +543,18 @@ async fn run_get_request(
|
||||
};
|
||||
|
||||
let start = start.next(blob.hash);
|
||||
let done = on_blob(context, jobs, &ticket, start, &blob.name).await?;
|
||||
|
||||
// `iroh_io` io needs to be done on a local spawn
|
||||
let ticket = ticket.clone();
|
||||
let context = context.clone();
|
||||
let name = blob.name.clone();
|
||||
let jobs = jobs.clone();
|
||||
let done = rt
|
||||
.local_pool()
|
||||
.spawn_pinned(move || {
|
||||
Box::pin(async move { on_blob(context, jobs, ticket, start, &name).await })
|
||||
})
|
||||
.await??;
|
||||
|
||||
next = done.next();
|
||||
};
|
||||
@@ -555,9 +568,9 @@ async fn run_get_request(
|
||||
/// This writes the blobs to the blobdir. If the blob is the database it will import it to
|
||||
/// the database of the current [`Context`].
|
||||
async fn on_blob(
|
||||
context: &Context,
|
||||
jobs: &Mutex<JoinSet<()>>,
|
||||
ticket: &Ticket,
|
||||
context: Context,
|
||||
jobs: Arc<Mutex<JoinSet<()>>>,
|
||||
ticket: Ticket,
|
||||
state: fsm::AtBlobHeader,
|
||||
name: &str,
|
||||
) -> Result<fsm::AtEndBlob> {
|
||||
|
||||
Reference in New Issue
Block a user