summaryrefslogtreecommitdiffstats
path: root/sparsify
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2012-03-15 15:49:22 +0000
committerRichard W.M. Jones <rjones@redhat.com>2012-03-16 21:52:52 +0000
commit96b80510da163b3999a86821ecb2fbc6de092e9d (patch)
treeafbea4bdc048d73b7e538f6377385c04a9098291 /sparsify
parent2c73bdb66b25f6cb00fbdd83e95b78776897057d (diff)
downloadlibguestfs-96b80510da163b3999a86821ecb2fbc6de092e9d.tar.gz
libguestfs-96b80510da163b3999a86821ecb2fbc6de092e9d.tar.xz
libguestfs-96b80510da163b3999a86821ecb2fbc6de092e9d.zip
sparsify: Unlink temporary overlay file if user presses ^C.
Add a signal handler so this potentially large temporary file is removed when the user hits ^C. (cherry picked from commit 7283a5a2765c0670e9dceec70e626a49a30d269c)
Diffstat (limited to 'sparsify')
-rw-r--r--sparsify/sparsify.ml6
1 files changed, 5 insertions, 1 deletions
diff --git a/sparsify/sparsify.ml b/sparsify/sparsify.ml
index a891beaa..a76bd5f1 100644
--- a/sparsify/sparsify.ml
+++ b/sparsify/sparsify.ml
@@ -143,9 +143,13 @@ let () =
(* Create the temporary overlay file. *)
let overlaydisk =
let tmp = Filename.temp_file "sparsify" ".qcow2" in
+ let unlink_tmp () = try unlink tmp with _ -> () in
(* Unlink on exit. *)
- at_exit (fun () -> try unlink tmp with _ -> ());
+ at_exit unlink_tmp;
+
+ (* Unlink on sigint. *)
+ Sys.set_signal Sys.sigint (Sys.Signal_handle (fun _ -> unlink_tmp ()));
(* Create it with the indisk as the backing file. *)
let cmd =