Avoid consuming 100% of CPU when stopping docker container

Fix #427
pull/448/head
Julien Duponchelle 8 years ago
parent f4f9e6eba6
commit f35c742b07
No known key found for this signature in database
GPG Key ID: F1E2485547D4595D

@ -299,6 +299,11 @@ class DockerVM(BaseVM):
"""Stops this Docker container."""
try:
if self._telnet_server:
self._telnet_server.close()
yield from self._telnet_server.wait_closed()
self._telnet_server = None
if self._ubridge_hypervisor and self._ubridge_hypervisor.is_running():
yield from self._ubridge_hypervisor.stop()
@ -306,10 +311,6 @@ class DockerVM(BaseVM):
if state == "paused":
yield from self.unpause()
if self._telnet_server:
self._telnet_server.close()
self._telnet_server = None
# t=5 number of seconds to wait before killing the container
try:
yield from self.manager.query("POST", "containers/{}/stop".format(self._cid), params={"t": 5})

@ -125,13 +125,14 @@ class AsyncioTelnetServer:
return_when=asyncio.FIRST_COMPLETED)
for coro in done:
data = coro.result()
# Console is closed
if len(data) == 0:
raise ConnectionResetError()
if coro == network_read:
network_read = asyncio.async(network_reader.read(READ_SIZE))
# Remote console is closed
if len(data) == 0:
raise ConnectionResetError()
if IAC in data:
data = yield from self._IAC_parser(data, network_reader, network_writer)
if self._writer:

@ -68,7 +68,6 @@ def test_start_command(vm):
assert vm.start_command is None
def test_create(loop, project, manager):
response = {

Loading…
Cancel
Save