Allow source debugger reconnection (#1667)
Allow to wait for a new debugger connection once the previous one is disconnected: - when receiving a detach command - when the client socket is closed (for example, lldb process is killed)
This commit is contained in:
@ -34,6 +34,7 @@ static const struct packet_handler_elem packet_handler_table[255] = {
|
||||
DEL_HANDLER('c', handle_continue_request),
|
||||
DEL_HANDLER('k', handle_kill_request),
|
||||
DEL_HANDLER('_', handle____request),
|
||||
DEL_HANDLER('D', handle_detach_request),
|
||||
};
|
||||
|
||||
WASMGDBServer *
|
||||
@ -89,7 +90,6 @@ fail:
|
||||
bool
|
||||
wasm_gdbserver_listen(WASMGDBServer *server)
|
||||
{
|
||||
bh_socket_t sockt_fd = (bh_socket_t)-1;
|
||||
int32 ret;
|
||||
|
||||
ret = os_socket_listen(server->listen_fd, 1);
|
||||
@ -98,6 +98,23 @@ wasm_gdbserver_listen(WASMGDBServer *server)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
LOG_VERBOSE("listen for gdb client");
|
||||
return true;
|
||||
|
||||
fail:
|
||||
os_socket_shutdown(server->listen_fd);
|
||||
os_socket_close(server->listen_fd);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
wasm_gdbserver_accept(WASMGDBServer *server)
|
||||
{
|
||||
|
||||
bh_socket_t sockt_fd = (bh_socket_t)-1;
|
||||
|
||||
LOG_VERBOSE("waiting for gdb client to connect...");
|
||||
|
||||
os_socket_accept(server->listen_fd, &sockt_fd, NULL, NULL);
|
||||
if (sockt_fd < 0) {
|
||||
LOG_ERROR("wasm gdb server error: socket accept failed");
|
||||
@ -115,6 +132,15 @@ fail:
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
wasm_gdbserver_detach(WASMGDBServer *server)
|
||||
{
|
||||
if (server->socket_fd > 0) {
|
||||
os_socket_shutdown(server->socket_fd);
|
||||
os_socket_close(server->socket_fd);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
wasm_close_gdbserver(WASMGDBServer *server)
|
||||
{
|
||||
@ -263,8 +289,9 @@ wasm_gdbserver_handle_packet(WASMGDBServer *server)
|
||||
n = os_socket_recv(server->socket_fd, buf, sizeof(buf));
|
||||
|
||||
if (n == 0) {
|
||||
LOG_VERBOSE("Debugger disconnected");
|
||||
return false;
|
||||
handle_detach_request(server, NULL);
|
||||
LOG_VERBOSE("Debugger disconnected, waiting for debugger reconnection");
|
||||
return true;
|
||||
}
|
||||
else if (n < 0) {
|
||||
#if defined(BH_PLATFORM_WINDOWS)
|
||||
|
||||
Reference in New Issue
Block a user