Skip to content

Commit 1001bc4

Browse files
committed
DAP: use Mutex when sending response
When debug.gem tries to send response from multiple threads, the socket connection is closed. I confirmed this bug when using custom request from vscode-rdbg
1 parent 733dd4b commit 1001bc4

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

lib/debug/server_dap.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ def self.local_fs_map_set map
125125
def dap_setup bytes
126126
CONFIG.set_config no_color: true
127127
@seq = 0
128+
@mutex = Mutex.new
128129

129130
case self
130131
when UI_UnixDomainServer
@@ -212,7 +213,11 @@ def send **kw
212213
if sock = @sock
213214
kw[:seq] = @seq += 1
214215
str = JSON.dump(kw)
215-
sock.write "Content-Length: #{str.bytesize}\r\n\r\n#{str}"
216+
@mutex.synchronize do
217+
unless sock.closed?
218+
sock.write "Content-Length: #{str.bytesize}\r\n\r\n#{str}"
219+
end
220+
end
216221
show_protocol '<', str
217222
end
218223
end

test/support/protocol_test_case.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ def attach_to_cdp_server
9393

9494
def req_dap_disconnect(terminate_debuggee:)
9595
send_dap_request 'disconnect', restart: false, terminateDebuggee: terminate_debuggee
96+
unless terminate_debuggee
97+
close_dap_writer
98+
res = find_response :event, 'terminated', 'V<D'
99+
end
96100
close_reader
97101
end
98102

@@ -438,6 +442,10 @@ def close_reader
438442
end
439443
end
440444

445+
def close_dap_writer
446+
@sock.close_write
447+
end
448+
441449
HOST = '127.0.0.1'
442450

443451
JAVASCRIPT_TYPE_TO_CLASS_MAPS = {

0 commit comments

Comments
 (0)