accounts: fix blocking jobs not spawning on blocking workers

memfd
Manos Pitsidianakis 2020-09-16 13:17:26 +03:00
parent e60eb23f4d
commit 8a8c790f8c
Signed by: Manos Pitsidianakis
GPG Key ID: 73627C2F690DF710
1 changed files with 26 additions and 8 deletions

View File

@ -1165,7 +1165,12 @@ impl Account {
.write() .write()
.unwrap() .unwrap()
.save(bytes.to_vec(), mailbox_hash, flags)?; .save(bytes.to_vec(), mailbox_hash, flags)?;
let (channel, handle, job_id) = self.job_executor.spawn_specialized(job);
let (channel, handle, job_id) = if self.backend_capabilities.is_async {
self.job_executor.spawn_specialized(job)
} else {
self.job_executor.spawn_blocking(job)
};
self.insert_job( self.insert_job(
job_id, job_id,
JobRequest::SaveMessage { JobRequest::SaveMessage {
@ -1508,8 +1513,11 @@ impl Account {
} }
let mailboxes_job = self.backend.read().unwrap().mailboxes(); let mailboxes_job = self.backend.read().unwrap().mailboxes();
if let Ok(mailboxes_job) = mailboxes_job { if let Ok(mailboxes_job) = mailboxes_job {
let (rcvr, handle, job_id) = let (rcvr, handle, job_id) = if self.backend_capabilities.is_async {
self.job_executor.spawn_specialized(mailboxes_job); self.job_executor.spawn_specialized(mailboxes_job)
} else {
self.job_executor.spawn_blocking(mailboxes_job)
};
self.insert_job(job_id, JobRequest::Mailboxes(handle, rcvr)); self.insert_job(job_id, JobRequest::Mailboxes(handle, rcvr));
}; };
} }
@ -1534,8 +1542,11 @@ impl Account {
.unwrap(); .unwrap();
return true; return true;
} }
let (rcvr, handle, job_id) = let (rcvr, handle, job_id) = if self.backend_capabilities.is_async {
self.job_executor.spawn_specialized(rest.into_future()); self.job_executor.spawn_specialized(rest.into_future())
} else {
self.job_executor.spawn_blocking(rest.into_future())
};
self.insert_job(job_id, JobRequest::Fetch(mailbox_hash, handle, rcvr)); self.insert_job(job_id, JobRequest::Fetch(mailbox_hash, handle, rcvr));
let payload = payload.unwrap(); let payload = payload.unwrap();
if let Err(err) = payload { if let Err(err) = payload {
@ -1607,8 +1618,11 @@ impl Account {
} }
let online_job = self.backend.read().unwrap().is_online(); let online_job = self.backend.read().unwrap().is_online();
if let Ok(online_job) = online_job { if let Ok(online_job) = online_job {
let (rcvr, handle, job_id) = let (rcvr, handle, job_id) = if self.backend_capabilities.is_async {
self.job_executor.spawn_specialized(online_job); self.job_executor.spawn_specialized(online_job)
} else {
self.job_executor.spawn_blocking(online_job)
};
self.insert_job(job_id, JobRequest::IsOnline(handle, rcvr)); self.insert_job(job_id, JobRequest::IsOnline(handle, rcvr));
}; };
} }
@ -1647,7 +1661,11 @@ impl Account {
let online_job = self.backend.read().unwrap().is_online(); let online_job = self.backend.read().unwrap().is_online();
if let Ok(online_job) = online_job { if let Ok(online_job) = online_job {
let (rcvr, handle, job_id) = let (rcvr, handle, job_id) =
self.job_executor.spawn_specialized(online_job); if self.backend_capabilities.is_async {
self.job_executor.spawn_specialized(online_job)
} else {
self.job_executor.spawn_blocking(online_job)
};
self.insert_job(job_id, JobRequest::IsOnline(handle, rcvr)); self.insert_job(job_id, JobRequest::IsOnline(handle, rcvr));
}; };
} }