dispvm: use try/finally to make sure that qubes.xml is unlocked
Even in case of some exception (in which case theoretically it should be unlocked at qfile-daemon-dvm exit, but the script may wait for something). QubesOS/qubes-issues#1636
This commit is contained in:
parent
ae848d5369
commit
5546d679c0
@ -51,6 +51,7 @@ class QfileDaemonDvm:
|
|||||||
|
|
||||||
qvm_collection = QubesVmCollection()
|
qvm_collection = QubesVmCollection()
|
||||||
qvm_collection.lock_db_for_writing()
|
qvm_collection.lock_db_for_writing()
|
||||||
|
try:
|
||||||
|
|
||||||
tar_process = subprocess.Popen(
|
tar_process = subprocess.Popen(
|
||||||
['bsdtar', '-C', current_savefile_vmdir,
|
['bsdtar', '-C', current_savefile_vmdir,
|
||||||
@ -62,7 +63,6 @@ class QfileDaemonDvm:
|
|||||||
vm = qvm_collection.get_vm_by_name(self.name)
|
vm = qvm_collection.get_vm_by_name(self.name)
|
||||||
if vm is None:
|
if vm is None:
|
||||||
sys.stderr.write('Domain ' + self.name + ' does not exist ?')
|
sys.stderr.write('Domain ' + self.name + ' does not exist ?')
|
||||||
qvm_collection.unlock_db()
|
|
||||||
return None
|
return None
|
||||||
label = vm.label
|
label = vm.label
|
||||||
if len(sys.argv) > 4 and len(sys.argv[4]) > 0:
|
if len(sys.argv) > 4 and len(sys.argv[4]) > 0:
|
||||||
@ -72,7 +72,6 @@ class QfileDaemonDvm:
|
|||||||
vm_disptempl = qvm_collection.get_vm_by_name(disp_templ)
|
vm_disptempl = qvm_collection.get_vm_by_name(disp_templ)
|
||||||
if vm_disptempl is None:
|
if vm_disptempl is None:
|
||||||
sys.stderr.write('Domain ' + disp_templ + ' does not exist ?')
|
sys.stderr.write('Domain ' + disp_templ + ' does not exist ?')
|
||||||
qvm_collection.unlock_db()
|
|
||||||
return None
|
return None
|
||||||
dispvm = qvm_collection.add_new_vm('QubesDisposableVm',
|
dispvm = qvm_collection.add_new_vm('QubesDisposableVm',
|
||||||
disp_template=vm_disptempl,
|
disp_template=vm_disptempl,
|
||||||
@ -98,7 +97,6 @@ class QfileDaemonDvm:
|
|||||||
# Wait for tar to finish
|
# Wait for tar to finish
|
||||||
if tar_process.wait() != 0:
|
if tar_process.wait() != 0:
|
||||||
sys.stderr.write('Failed to unpack saved-cows.tar')
|
sys.stderr.write('Failed to unpack saved-cows.tar')
|
||||||
qvm_collection.unlock_db()
|
|
||||||
return None
|
return None
|
||||||
print >>sys.stderr, "time=%s, VM starting" % (str(time.time()))
|
print >>sys.stderr, "time=%s, VM starting" % (str(time.time()))
|
||||||
try:
|
try:
|
||||||
@ -112,6 +110,7 @@ class QfileDaemonDvm:
|
|||||||
dispvm.netvm = vm.dispvm_netvm
|
dispvm.netvm = vm.dispvm_netvm
|
||||||
print >>sys.stderr, "time=%s, VM started" % (str(time.time()))
|
print >>sys.stderr, "time=%s, VM started" % (str(time.time()))
|
||||||
qvm_collection.save()
|
qvm_collection.save()
|
||||||
|
finally:
|
||||||
qvm_collection.unlock_db()
|
qvm_collection.unlock_db()
|
||||||
# Reload firewall rules
|
# Reload firewall rules
|
||||||
print >>sys.stderr, "time=%s, reloading firewall" % (str(time.time()))
|
print >>sys.stderr, "time=%s, reloading firewall" % (str(time.time()))
|
||||||
|
Loading…
Reference in New Issue
Block a user