018877a19c
While libvirt handle locking itself, there is also Qubes-specific startup part. Especially starting qrexec-daemon and waiting until qrexec-agent connect to it. When someone will attempt to start VM the second time (or simply assume it's already running) - qrexec will not be connected yet and the operation will fail. Solve the problem by wrapping the whole vm.start() function with a lock, including a check if VM is running and waiting for qrexec. Also, do not throw exception if VM is already running. This way, after a call to vm.start(), VM will be started with qrexec connected - regardless of who really started it. Note that, it will not solve the situation when someone check if VM is running manually, like: if not vm.is_running(): yield from vm.start() Such code should be changed to simply: yield from vm.start() Fixes QubesOS/qubes-issues#2001 Fixes QubesOS/qubes-issues#2666 |
||
---|---|---|
.. | ||
api | ||
ext | ||
qmemman | ||
storage | ||
tests | ||
tools | ||
vm | ||
__init__.py | ||
app.py | ||
backup.py | ||
config.py | ||
core2migration.py | ||
devices.py | ||
dochelpers.py | ||
events.py | ||
exc.py | ||
firewall.py | ||
log.py | ||
rngdoc.py | ||
tarwriter.py | ||
utils.py |