never block on interrupt_inbox_idle

This commit is contained in:
holger krekel
2019-12-19 07:36:56 +01:00
parent 7ef22f2940
commit 53453bb71a
2 changed files with 16 additions and 16 deletions

View File

@@ -144,7 +144,7 @@ impl Context {
} }
Config::InboxWatch => { Config::InboxWatch => {
let ret = self.sql.set_raw_config(self, key, value); let ret = self.sql.set_raw_config(self, key, value);
interrupt_inbox_idle(self, true); interrupt_inbox_idle(self);
ret ret
} }
Config::SentboxWatch => { Config::SentboxWatch => {

View File

@@ -480,19 +480,19 @@ pub fn perform_sentbox_idle(context: &Context) {
.idle(context, use_network); .idle(context, use_network);
} }
pub fn interrupt_inbox_idle(context: &Context, block: bool) { pub fn interrupt_inbox_idle(context: &Context) {
info!(context, "interrupt_inbox_idle called blocking={}", block); info!(context, "interrupt_inbox_idle called");
if block { // we do not block on trying to obtain the thread lock
context.inbox_thread.read().unwrap().interrupt_idle(context); // because we don't know in which state the thread is.
} else { // If it's currently fetching then we can not get the lock
match context.inbox_thread.try_read() { // but we flag it for checking jobs so that idle will be skipped.
Ok(inbox_thread) => { match context.inbox_thread.try_read() {
inbox_thread.interrupt_idle(context); Ok(inbox_thread) => {
} inbox_thread.interrupt_idle(context);
Err(err) => { }
*context.perform_inbox_jobs_needed.write().unwrap() = true; Err(err) => {
warn!(context, "could not interrupt idle: {}", err); *context.perform_inbox_jobs_needed.write().unwrap() = true;
} warn!(context, "could not interrupt idle: {}", err);
} }
} }
} }
@@ -604,7 +604,7 @@ pub fn maybe_network(context: &Context) {
} }
interrupt_smtp_idle(context); interrupt_smtp_idle(context);
interrupt_inbox_idle(context, true); interrupt_inbox_idle(context);
interrupt_mvbox_idle(context); interrupt_mvbox_idle(context);
interrupt_sentbox_idle(context); interrupt_sentbox_idle(context);
} }
@@ -972,7 +972,7 @@ pub fn job_add(
).ok(); ).ok();
match thread { match thread {
Thread::Imap => interrupt_inbox_idle(context, false), Thread::Imap => interrupt_inbox_idle(context),
Thread::Smtp => interrupt_smtp_idle(context), Thread::Smtp => interrupt_smtp_idle(context),
Thread::Unknown => {} Thread::Unknown => {}
} }