mirror of
https://github.com/chatmail/core.git
synced 2026-05-07 08:56:30 +03:00
Unlock session before calling add_flag_finalized
add_flag_finalized tries to lock session again and IMAP thread deadlocks if session is not unlocked.
This commit is contained in:
@@ -866,38 +866,35 @@ impl Imap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(ref mut session) = &mut *self.session.lock().await {
|
if let Some(ref mut session) = &mut *self.session.lock().await {
|
||||||
match session.uid_copy(&set, &dest_folder).await {
|
if let Err(err) = session.uid_copy(&set, &dest_folder).await {
|
||||||
Ok(_) => {
|
warn!(context, "Could not copy message: {}", err);
|
||||||
if !self.add_flag_finalized(context, uid, "\\Deleted").await {
|
return ImapActionResult::Failed;
|
||||||
warn!(context, "Cannot mark {} as \"Deleted\" after copy.", uid);
|
|
||||||
emit_event!(
|
|
||||||
context,
|
|
||||||
Event::ImapMessageMoved(format!(
|
|
||||||
"IMAP Message {} copied to {} (delete FAILED)",
|
|
||||||
display_folder_id, dest_folder
|
|
||||||
))
|
|
||||||
);
|
|
||||||
ImapActionResult::Failed
|
|
||||||
} else {
|
|
||||||
self.config.write().await.selected_folder_needs_expunge = true;
|
|
||||||
emit_event!(
|
|
||||||
context,
|
|
||||||
Event::ImapMessageMoved(format!(
|
|
||||||
"IMAP Message {} copied to {} (delete successfull)",
|
|
||||||
display_folder_id, dest_folder
|
|
||||||
))
|
|
||||||
);
|
|
||||||
ImapActionResult::Success
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
warn!(context, "Could not copy message: {}", err);
|
|
||||||
ImapActionResult::Failed
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unreachable!();
|
unreachable!();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !self.add_flag_finalized(context, uid, "\\Deleted").await {
|
||||||
|
warn!(context, "Cannot mark {} as \"Deleted\" after copy.", uid);
|
||||||
|
emit_event!(
|
||||||
|
context,
|
||||||
|
Event::ImapMessageMoved(format!(
|
||||||
|
"IMAP Message {} copied to {} (delete FAILED)",
|
||||||
|
display_folder_id, dest_folder
|
||||||
|
))
|
||||||
|
);
|
||||||
|
ImapActionResult::Failed
|
||||||
|
} else {
|
||||||
|
self.config.write().await.selected_folder_needs_expunge = true;
|
||||||
|
emit_event!(
|
||||||
|
context,
|
||||||
|
Event::ImapMessageMoved(format!(
|
||||||
|
"IMAP Message {} copied to {} (delete successfull)",
|
||||||
|
display_folder_id, dest_folder
|
||||||
|
))
|
||||||
|
);
|
||||||
|
ImapActionResult::Success
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user