[lldb-vscode] stop read loop after termination

Summary:
On Linux, when executing lldb-vscode on a remote machine, lldb-vscode doesn't die after the debug session ends. It keeps trying to read JSON input to no avail.
This diff indicates lldb-vscode to stop reading after a termination event has been processed.

Reviewers: clayborg, aadsm, kusmour

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D76314
This commit is contained in:
Walter Erquinigo 2020-03-17 12:54:26 -07:00
parent e708471395
commit 576105c322
2 changed files with 27 additions and 1 deletions

View File

@ -9,6 +9,7 @@ from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
import lldbvscode_testcase
import time
import os
@ -35,6 +36,31 @@ class TestVSCode_launch(lldbvscode_testcase.VSCodeTestCaseBase):
self.assertTrue(program in lines[0],
"make sure program path is in first argument")
@skipIfWindows
@skipIfRemote
def test_termination(self):
'''
Tests the correct termination of lldb-vscode upon a 'disconnect'
request.
'''
self.create_debug_adaptor()
# The underlying lldb-vscode process must be alive
self.assertEqual(self.vscode.process.poll(), None)
# The lldb-vscode process should finish even though
# we didn't close the communication socket explicitly
self.vscode.request_disconnect()
# Wait until the underlying lldb-vscode process dies.
# We need to do this because the popen.wait function in python2.7
# doesn't have a timeout argument.
for _ in range(10):
time.sleep(1)
if self.vscode.process.poll() is not None:
break
# Check the return code
self.assertEqual(self.vscode.process.poll(), 0)
@skipIfWindows
@skipIfRemote
def test_stopOnEntry(self):

View File

@ -2818,7 +2818,7 @@ int main(int argc, char *argv[]) {
}
auto request_handlers = GetRequestHandlers();
uint32_t packet_idx = 0;
while (true) {
while (!g_vsc.sent_terminated_event) {
std::string json = g_vsc.ReadJSON();
if (json.empty())
break;