forked from OSchip/llvm-project
[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:
parent
e708471395
commit
576105c322
|
@ -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):
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue