Fix start-related asyncio integration

cherry-picked commit 05fc3a4
This commit is contained in:
Marek Marczykowski-Górecki 2017-03-31 16:47:47 +02:00 committed by Wojtek Porczyk
parent 3bc4ec1e98
commit 96db9a46d1
2 changed files with 18 additions and 10 deletions

View File

@ -25,6 +25,8 @@ import os
import re import re
import subprocess import subprocess
import asyncio
import qubes.config import qubes.config
import qubes.ext import qubes.ext
@ -194,13 +196,17 @@ class GUI(qubes.ext.Extension):
guid_cmd += self.kde_guid_args(vm) guid_cmd += self.kde_guid_args(vm)
try: @asyncio.coroutine
vm.start_daemon(guid_cmd) def coro():
except subprocess.CalledProcessError: try:
raise qubes.exc.QubesVMError(vm, yield from vm.start_daemon(guid_cmd)
'Cannot start qubes-guid for domain {!r}'.format(vm.name)) except subprocess.CalledProcessError:
raise qubes.exc.QubesVMError(vm,
'Cannot start qubes-guid for domain {!r}'.format(vm.name))
vm.fire_event('monitor-layout-change') vm.fire_event('monitor-layout-change')
asyncio.ensure_future(coro())
@staticmethod @staticmethod

View File

@ -823,12 +823,15 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
yield from self.netvm.start(start_guid=start_guid, yield from self.netvm.start(start_guid=start_guid,
notify_function=notify_function) notify_function=notify_function)
# TODO: lock
qmemman_client = yield from asyncio.get_event_loop().run_in_executor(
None, self.request_memory, mem_required)
yield from asyncio.get_event_loop().run_in_executor(None, yield from asyncio.get_event_loop().run_in_executor(None,
self.storage.start) self.storage.start)
self._update_libvirt_domain() self._update_libvirt_domain()
qmemman_client = yield from asyncio.get_event_loop().run_in_executor(
None, self.request_memory, mem_required)
try: try:
self.libvirt_domain.createWithFlags(libvirt.VIR_DOMAIN_START_PAUSED) self.libvirt_domain.createWithFlags(libvirt.VIR_DOMAIN_START_PAUSED)
except: except:
@ -1213,8 +1216,7 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
self.log.info('qubes-session acquired') self.log.info('qubes-session acquired')
self.have_session.set() self.have_session.set()
self.fire_event('domain-has-session')
self.fire_event('have-session')
def create_on_disk(self, pool=None, pools=None): def create_on_disk(self, pool=None, pools=None):
'''Create files needed for VM. '''Create files needed for VM.