[Lldb-commits] [lldb] [lldb] Refactor JSONTransport own MainLoop read handle. (PR #179564)

Ebuka Ezike via lldb-commits lldb-commits at lists.llvm.org
Thu Feb 5 09:05:02 PST 2026


================
@@ -182,29 +181,27 @@ template <typename Proto> class IOTransport : public JSONTransport<Proto> {
   using Message = typename JSONTransport<Proto>::Message;
   using MessageHandler = typename JSONTransport<Proto>::MessageHandler;
 
-  IOTransport(lldb::IOObjectSP in, lldb::IOObjectSP out)
-      : m_in(in), m_out(out) {}
+  IOTransport(MainLoop &loop, lldb::IOObjectSP in, lldb::IOObjectSP out)
+      : m_loop(loop), m_in(in), m_out(out) {}
 
   llvm::Error Send(const typename Proto::Evt &evt) override {
     return Write(evt);
   }
+
   llvm::Error Send(const typename Proto::Req &req) override {
     return Write(req);
   }
+
   llvm::Error Send(const typename Proto::Resp &resp) override {
     return Write(resp);
   }
 
-  llvm::Expected<MainLoop::ReadHandleUP>
-  RegisterMessageHandler(MainLoop &loop, MessageHandler &handler) override {
+  llvm::Error RegisterMessageHandler(MessageHandler &handler) override {
     Status status;
-    MainLoop::ReadHandleUP read_handle = loop.RegisterReadObject(
+    m_read_handle = m_loop.RegisterReadObject(
         m_in, [this, &handler](MainLoopBase &base) { OnRead(base, handler); },
         status);
-    if (status.Fail()) {
-      return status.takeError();
-    }
-    return read_handle;
+    return status.takeError();
   }
 
----------------
da-viper wrote:

I don't see a reason we heed to hold a reference to the Mainloop as we get it from `registerReadObject` and only use it there. especially since the MCP `Server::Accept` provides one and we have one in  DAP. Unless I am missing something. 

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


More information about the lldb-commits mailing list