4747#include < future>
4848#include < memory>
4949#include < mutex>
50+ #include < optional>
5051#include < string>
5152#include < utility>
5253
@@ -70,15 +71,6 @@ const char DEV_NULL[] = "/dev/null";
7071#endif
7172} // namespace
7273
73- static Response CancelledResponse (int64_t seq, std::string command) {
74- Response response;
75- response.request_seq = seq;
76- response.command = command;
77- response.success = false ;
78- response.message = Response::Message::cancelled;
79- return response;
80- }
81-
8274namespace lldb_dap {
8375
8476DAP::DAP (llvm::StringRef path, Log *log, const ReplMode default_repl_mode,
@@ -253,11 +245,17 @@ void DAP::SendJSON(const llvm::json::Value &json) {
253245}
254246
255247void DAP::Send (const Message &message) {
248+ // FIXME: After all the requests have migrated from LegacyRequestHandler >
249+ // RequestHandler<> this should be handled in RequestHandler<>::operator().
256250 if (auto *resp = std::get_if<Response>(&message);
257251 resp && debugger.InterruptRequested ()) {
258252 // If the debugger was interrupted, convert this response into a 'cancelled'
259253 // response because we might have a partial result.
260- Response cancelled = CancelledResponse (resp->request_seq , resp->command );
254+ Response cancelled{/* request_seq=*/ resp->request_seq ,
255+ /* command=*/ resp->command ,
256+ /* success=*/ false ,
257+ /* message=*/ Response::Message::cancelled,
258+ /* body=*/ std::nullopt };
261259 if (llvm::Error err = transport.Write (cancelled))
262260 DAP_LOG_ERROR (log, std::move (err), " ({1}) write failed: {0}" ,
263261 transport.GetClientName ());
@@ -711,20 +709,9 @@ bool DAP::HandleObject(const Message &M) {
711709 m_active_request = nullptr ;
712710 });
713711
714- {
715- // If there is a pending cancelled request, preempt the request and mark
716- // it cancelled.
717- std::lock_guard<std::mutex> lock (m_cancelled_requests_mutex);
718- if (m_cancelled_requests.find (req->seq ) != m_cancelled_requests.end ()) {
719- Response cancelled = CancelledResponse (req->seq , req->command );
720- Send (cancelled);
721- return true ;
722- }
723- }
724-
725712 auto handler_pos = request_handlers.find (req->command );
726713 if (handler_pos != request_handlers.end ()) {
727- (* handler_pos->second ) (*req);
714+ handler_pos->second -> Run (*req);
728715 return true ; // Success
729716 }
730717
@@ -825,6 +812,11 @@ llvm::Error DAP::Disconnect(bool terminateDebuggee) {
825812 return ToError (error);
826813}
827814
815+ bool DAP::IsCancelled (const protocol::Request &req) {
816+ std::lock_guard<std::mutex> lock (m_cancelled_requests_mutex);
817+ return m_cancelled_requests.find (req.seq ) != m_cancelled_requests.end ();
818+ }
819+
828820void DAP::ClearCancelRequest (const CancelArguments &args) {
829821 std::lock_guard<std::mutex> cancalled_requests_lock (
830822 m_cancelled_requests_mutex);
0 commit comments