[lldb-dev] remote server crash -> lldb waits forever in accept()

Ted Woodward via lldb-dev lldb-dev at lists.llvm.org
Fri Apr 28 10:21:17 PDT 2017


Hi Chris, Pavel,

I've got a problem launching the hexagon simulator from lldb. It's launched
the same way that debugserver/lldb-server is launched, with reverse connect
on a TCP socket. The user can modify the simulator command line (using
target.run-args), and can easily give a set of options that the simulator
can't handle. In this case the simulator quits before connecting to lldb,
and lldb will wait forever for the connection, since TCPSocket::Accept has
no timeout.

Currently I have a select call before the accept, to make sure there is
activity on the socket. This doesn't feel right with the new changes using
MainLoop, so I wanted to see what the list thinks. I believe it will happen
any time that debugserver/lldb-server quits or crashes before connecting.
That should be easy to test.

This is what I use, right before the call to accept_loop.Run in
TCPSocket::Accept:

    NativeSocket accept_socket = -1;
    fd_set readset;
    FD_ZERO(&readset);
    for (auto socket : m_listen_sockets) {
      auto fd = socket.first;
      FD_SET(fd, &readset);
      if (fd > accept_socket)
        accept_socket = fd;
    }
    struct timeval timeout = {10, 0};
    int result = ::select(accept_socket + 1, &readset, NULL, NULL,
&timeout);
    if (result == 0) {
      printf("error: timeout waiting for remote server to connect!\n");
      error.SetErrorString("timeout waiting for remote server to connect");
      return error;
    } else if (result < 0) {
      printf("error: remote server does not exist!\n");
      SetLastError(error);
      return error;
    }


Any thoughts this issue?

Ted

--
Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a
Linux Foundation Collaborative Project





More information about the lldb-dev mailing list