[Lldb-commits] [lldb] [lldb-dap] Adding support for cancelling a request. (PR #130169)

Adrian Vogelsgesang via lldb-commits lldb-commits at lists.llvm.org
Wed Mar 19 06:31:38 PDT 2025


================
@@ -96,7 +115,7 @@ Expected<std::optional<Message>> Transport::Read() {
     return createStringError(
         formatv("invalid content length {0}", *raw_length).str());
 
-  Expected<std::string> raw_json = ReadFull(*input, length);
----------------
vogelsgesang wrote:

we should probably only apply a timeout before receiving the first byte of a message.

Otherwise, we might run into hard-to-debug issues where the client sends

```
Content-Length: 123
\r\n\r\n
<wait for 2 seconds>
actual request body
```

With the current logic, we would first consume the `Content-Length: 123\r\n\rn\n` header, then run into the timeout. Upon retrying the read in `DAP::Loop()` we would the find the request body without the required `Content-Length` header.

The client would be compliant with the Debug Adapter Protocol specification, yet `lldb-dap` would choke on this message.

It seems we are only using the timeout such that the `disconnecting` flag is checked regularly in `DAP::Loop`. Instead of using a timeout to wake up the reader-thread, would it maybe make sense to instead call `Transport::Close` when we want to shut down the reader? That should also cancel any outstanding reads, doesn't it?

https://github.com/llvm/llvm-project/pull/130169


More information about the lldb-commits mailing list