ovyalov added a comment. In http://reviews.llvm.org/D13881#270878, @labath wrote:
> I *think* it looks good, but I find it quite hard to review a change of this > size. > A wise man once said "if your commit description contains bullet points, you > are doing too much". I think it would be better to split up changes like this > in the future. > > > Make PlatformRemoteGDBServer to support retry-based connect - both for > > ConnectRemote and debug server connect. Since in case of domain sockets > > lldb-server doesn't write port into named pipe we cannot use it as a > > synchronization point - so it's possible that qLaunchGDBServer will be > > received by host before debug server is up and listens on socket. > > > I would like to preserve the invariant that by the time a reply to > qLaunchGDBServer is received, the server is up and ready to serve > connections. How about we keep this file synchronization protocol even when > using domain sockets? The server could write nothing (or the socket path, or > whatever) to the file when it is up and ready. That way, we don't have to > increase the number of places that do those silly wait-and-retry loops. What > do you think? I was thinking about sending a full connect URL(instead of port) via pipe from debug server to platform/lldb host - so, it can be less transport type dependent. But there are some problems here - e.g., we cannot compose TCP connect URL properly on server side because only client knows a proper server's host address (if server is sitting behind proxies/firewalls/...). So, ended up with extending Acceptor with GetLocalSocketId method which returns a string either with TCP port or socket path so we can wait until debug server is up in either case. ================ Comment at: source/Plugins/Platform/Android/AdbClient.cpp:151 @@ +150,3 @@ + char message[PATH_MAX]; + snprintf (message, sizeof (message), "forward:tcp:%d;localfilesystem:%s", local_port, remote_socket_name); + ---------------- I suspect adb fails in such situation. Let me verify it once lldb-server/Acceptor will support protocol-based URL like unix:///tmp/platform.sock. Now it's somewhat problematic because we cannot pass colon as a part of URL - if colon is found it's treated as $host:$port pattern and TCPSocket is created. ================ Comment at: source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h:227-228 @@ -226,7 +226,4 @@ lldb::UnixSignalsSP m_remote_signals_sp; - // Launch the lldb-gdbserver on the remote host and return the port it is listening on or 0 on - // failure. Subclasses should override this method if they want to do extra actions before or - // after launching the lldb-gdbserver. - virtual uint16_t - LaunchGDBserverAndGetPort (lldb::pid_t &pid); + // Launch the debug server on the remote host - caller connects to launched + // debug server using connect_url. ---------------- Done. http://reviews.llvm.org/D13881 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits