mirror of
https://github.com/chatmail/core.git
synced 2026-05-19 14:56:33 +03:00
fix: ImapSession::select_or_create_folder(): Don't fail if folder is created in parallel
This commit is contained in:
@@ -112,11 +112,16 @@ impl ImapSession {
|
|||||||
Err(err) => match err {
|
Err(err) => match err {
|
||||||
Error::NoFolder(..) => {
|
Error::NoFolder(..) => {
|
||||||
info!(context, "Failed to select folder {} because it does not exist, trying to create it.", folder);
|
info!(context, "Failed to select folder {} because it does not exist, trying to create it.", folder);
|
||||||
self.create(folder).await.with_context(|| {
|
let create_res = self.create(folder).await;
|
||||||
format!("Couldn't select folder ('{err}'), then create() failed")
|
if let Err(ref err) = create_res {
|
||||||
})?;
|
info!(context, "Couldn't select folder, then create() failed: {err:#}.");
|
||||||
|
// Need to recheck, could have been created in parallel.
|
||||||
Ok(self.select_folder(context, Some(folder)).await.with_context(|| format!("failed to select newely created folder {folder}"))?)
|
}
|
||||||
|
let select_res = self.select_folder(context, Some(folder)).await.with_context(|| format!("failed to select newely created folder {folder}"));
|
||||||
|
if select_res.is_err() {
|
||||||
|
create_res?;
|
||||||
|
}
|
||||||
|
select_res
|
||||||
}
|
}
|
||||||
_ => Err(err).with_context(|| format!("failed to select folder {folder} with error other than NO, not trying to create it")),
|
_ => Err(err).with_context(|| format!("failed to select folder {folder} with error other than NO, not trying to create it")),
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user