Commit 9c354f13 authored by Nikos Skalkotos's avatar Nikos Skalkotos
Browse files

Handle keaboard interrupts and TERM signals.

parent 4787037b
......@@ -67,6 +67,7 @@ def image_creator(d, media, out):
disk.cleanup()
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
try:
snapshot = disk.snapshot()
dev = disk.get_device(snapshot)
......
......@@ -84,13 +84,16 @@ class Disk(object):
"""Cleanup internal data. This needs to be called before the
program ends.
"""
while len(self._devices):
device = self._devices.pop()
device.destroy()
while len(self._cleanup_jobs):
job, args = self._cleanup_jobs.pop()
job(*args)
try:
while len(self._devices):
device = self._devices.pop()
device.destroy()
finally:
# Make sure those are executed even if one of the device.destroy
# methods throws exeptions.
while len(self._cleanup_jobs):
job, args = self._cleanup_jobs.pop()
job(*args)
def snapshot(self):
"""Creates a snapshot of the original source media of the Disk
......@@ -225,12 +228,14 @@ class DiskDevice(object):
def destroy(self):
"""Destroy this DiskDevice instance."""
if self.guestfs_enabled:
self.g.umount_all()
self.g.sync()
# Close the guestfs handler if open
self.g.close()
# In new guestfs versions, there is a handy shutdown method for this
try:
if self.guestfs_enabled:
self.g.umount_all()
self.g.sync()
finally:
# Close the guestfs handler if open
self.g.close()
def progress_callback(self, ev, eh, buf, array):
position = array[2]
......
......@@ -45,6 +45,7 @@ import sys
import os
import optparse
import StringIO
import signal
def check_writable_dir(option, opt_str, value, parser):
......@@ -187,6 +188,12 @@ def image_creator():
"(use --force to overwrite it)." % filename)
disk = Disk(options.source, out)
def signal_handler(signum, frame):
disk.cleanup()
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
try:
snapshot = disk.snapshot()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment