hvm: update appmenus only on the first qubes.NotifyTools call

Or more precisely - only when qrexec_installed value is changed from
False to True.
Previously it was called at each VM startup.
This commit is contained in:
Marek Marczykowski-Górecki 2015-08-09 21:21:47 +02:00
parent 26cf723841
commit e3ae3cdf34
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -14,6 +14,7 @@ def main():
print >> sys.stderr, 'This script must be called as qrexec service!'
exit(1)
prev_qrexec_installed = False
source_vm = None
qvm_collection = QubesVmCollection()
qvm_collection.lock_db_for_writing()
@ -66,6 +67,7 @@ def main():
else:
user = None
prev_qrexec_installed = source_vm.qrexec_installed
# Let the tools to be able to enable *or disable* each particular component
source_vm.qrexec_installed = qrexec > 0
source_vm.guiagent_installed = gui > 0
@ -81,11 +83,12 @@ def main():
finally:
qvm_collection.unlock_db()
retcode = subprocess.call(['qvm-sync-appmenus', '--force-rpc'])
if retcode == 0 and hasattr(source_vm, 'appmenus_recreate'):
# TODO: call the same for child VMs? This isn't done for Linux VMs,
# so probably should be ignored for Windows also
source_vm.appmenus_recreate()
if not prev_qrexec_installed and source_vm.qrexec_installed:
retcode = subprocess.call(['qvm-sync-appmenus', '--force-rpc'])
if retcode == 0 and hasattr(source_vm, 'appmenus_recreate'):
# TODO: call the same for child VMs? This isn't done for Linux VMs,
# so probably should be ignored for Windows also
source_vm.appmenus_recreate()
main()