prevent panic when handling an LSP response with no request (#2475)
A language server may push a response which doesn't belong to any request. With this change, we discard the response rather than crashing. In the case of #2474, the language server sends an error message with a null request ID which should not ever exist in the `pending_requests` HashMap. closes #2474
This commit is contained in:
parent
0258cf45f3
commit
50dd11985c
1 changed files with 15 additions and 14 deletions
|
@ -215,20 +215,21 @@ impl Transport {
|
|||
}
|
||||
};
|
||||
|
||||
let tx = self
|
||||
.pending_requests
|
||||
.lock()
|
||||
.await
|
||||
.remove(&id)
|
||||
.expect("pending_request with id not found!");
|
||||
|
||||
match tx.send(result).await {
|
||||
Ok(_) => (),
|
||||
Err(_) => error!(
|
||||
"Tried sending response into a closed channel (id={:?}), original request likely timed out",
|
||||
id
|
||||
),
|
||||
};
|
||||
if let Some(tx) = self.pending_requests.lock().await.remove(&id) {
|
||||
match tx.send(result).await {
|
||||
Ok(_) => (),
|
||||
Err(_) => error!(
|
||||
"Tried sending response into a closed channel (id={:?}), original request likely timed out",
|
||||
id
|
||||
),
|
||||
};
|
||||
} else {
|
||||
log::error!(
|
||||
"Discarding Language Server response without a request (id={:?}) {:?}",
|
||||
id,
|
||||
result
|
||||
);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue