Use AutoAbortJoinHandle in main::entry

so that the tasks will be cancelled if future returned by
`entry()` is cancelled.

Signed-off-by: Jiahao XU <Jiahao_XU@outlook.com>
This commit is contained in:
Jiahao XU 2022-08-04 18:39:17 +10:00
parent a13180f79a
commit e8301839a9
No known key found for this signature in database
GPG key ID: 591C0B03040416D6

View file

@ -327,7 +327,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let tasks: Vec<_> = crate_names let tasks: Vec<_> = crate_names
.into_iter() .into_iter()
.map(|crate_name| { .map(|crate_name| {
tokio::spawn(binstall::resolve( AutoAbortJoinHandle::spawn(binstall::resolve(
binstall_opts.clone(), binstall_opts.clone(),
crate_name, crate_name,
temp_dir_path.clone(), temp_dir_path.clone(),
@ -341,7 +341,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
// Confirm // Confirm
let mut resolutions = Vec::with_capacity(tasks.len()); let mut resolutions = Vec::with_capacity(tasks.len());
for task in tasks { for task in tasks {
resolutions.push(await_task(task).await?); resolutions.push(task.await??);
} }
uithread.confirm().await?; uithread.confirm().await?;
@ -350,7 +350,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
resolutions resolutions
.into_iter() .into_iter()
.map(|resolution| { .map(|resolution| {
tokio::spawn(binstall::install( AutoAbortJoinHandle::spawn(binstall::install(
resolution, resolution,
binstall_opts.clone(), binstall_opts.clone(),
jobserver_client.clone(), jobserver_client.clone(),
@ -369,7 +369,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let crates_io_api_client = crates_io_api_client.clone(); let crates_io_api_client = crates_io_api_client.clone();
let install_path = install_path.clone(); let install_path = install_path.clone();
tokio::spawn(async move { AutoAbortJoinHandle::spawn(async move {
let resolution = binstall::resolve( let resolution = binstall::resolve(
opts.clone(), opts.clone(),
crate_name, crate_name,
@ -388,7 +388,7 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> {
let mut metadata_vec = Vec::with_capacity(tasks.len()); let mut metadata_vec = Vec::with_capacity(tasks.len());
for task in tasks { for task in tasks {
if let Some(metadata) = await_task(task).await? { if let Some(metadata) = task.await?? {
metadata_vec.push(metadata); metadata_vec.push(metadata);
} }
} }