This commit is contained in:
Aleksey Kladov 2019-05-31 20:30:14 +03:00
parent 2d773a46c9
commit 15efd58274

View file

@ -470,10 +470,35 @@ impl<'a> PoolDispatcher<'a> {
self.world.cancel_requests(); self.world.cancel_requests();
} }
self.pool.execute({
let world = self.world.snapshot(); let world = self.world.snapshot();
let sender = self.sender.clone(); let sender = self.sender.clone();
self.pool.execute(move || { move || {
let response = match f(world, params) { let result = f(world, params);
let task = result_to_task::<R>(id, result);
sender.send(task).unwrap();
}
});
Ok(self)
}
fn finish(&mut self) -> std::result::Result<u64, RawRequest> {
match (self.res.take(), self.req.take()) {
(Some(res), None) => Ok(res),
(None, Some(req)) => Err(req),
_ => unreachable!(),
}
}
}
fn result_to_task<R>(id: u64, result: Result<R::Result>) -> Task
where
R: req::Request + 'static,
R::Params: DeserializeOwned + Send + 'static,
R::Result: Serialize + 'static,
{
let response = match result {
Ok(resp) => RawResponse::ok::<R>(id, &resp), Ok(resp) => RawResponse::ok::<R>(id, &resp),
Err(e) => match e.downcast::<LspError>() { Err(e) => match e.downcast::<LspError>() {
Ok(lsp_error) => RawResponse::err(id, lsp_error.code, lsp_error.message), Ok(lsp_error) => RawResponse::err(id, lsp_error.code, lsp_error.message),
@ -503,19 +528,7 @@ impl<'a> PoolDispatcher<'a> {
} }
}, },
}; };
let task = Task::Respond(response); Task::Respond(response)
sender.send(task).unwrap();
});
Ok(self)
}
fn finish(&mut self) -> std::result::Result<u64, RawRequest> {
match (self.res.take(), self.req.take()) {
(Some(res), None) => Ok(res),
(None, Some(req)) => Err(req),
_ => unreachable!(),
}
}
} }
fn update_file_notifications_on_threadpool( fn update_file_notifications_on_threadpool(