]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
kvm tools: Free memory and FDs on exit
authorSasha Levin <levinsasha928@gmail.com>
Wed, 6 Apr 2011 16:07:43 +0000 (19:07 +0300)
committerPekka Enberg <penberg@kernel.org>
Wed, 6 Apr 2011 16:44:47 +0000 (19:44 +0300)
Following patch adds more cleanup code when exiting.
Close disk image, free msrs array and destroy the timer fd.

Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
tools/kvm/include/kvm/kvm.h
tools/kvm/kvm.c
tools/kvm/main.c

index a1af42f00ba6bfd886cb6e762258208ff3f9c612..a0993075483f513c1b170d01c520a8b3e43a5fd1 100644 (file)
@@ -43,6 +43,7 @@ bool kvm__load_kernel(struct kvm *kvm, const char *kernel_filename,
 void kvm__reset_vcpu(struct kvm *self);
 void kvm__setup_bios(struct kvm *self);
 void kvm__start_timer(struct kvm *self);
+void kvm__stop_timer(struct kvm *self);
 void kvm__run(struct kvm *self);
 void kvm__irq_line(struct kvm *self, int irq, int level);
 bool kvm__emulate_io(struct kvm *self, uint16_t port, void *data, int direction, int size, uint32_t count);
index 5067b8b0b05b89ea07d1f3815ac0ca73faf310bf..93d48b3454c88489fc6532e09fcead8ac2e7910e 100644 (file)
@@ -105,6 +105,11 @@ static struct kvm *kvm__new(void)
 
 void kvm__delete(struct kvm *self)
 {
+       kvm__stop_timer(self);
+
+       if (self->msrs)
+               free(self->msrs);
+
        free(self->ram_start);
        free(self);
 }
@@ -612,6 +617,15 @@ void kvm__start_timer(struct kvm *self)
                die("timer_settime()");
 }
 
+void kvm__stop_timer(struct kvm *self)
+{
+       if (self->timerid)
+               if (timer_delete(self->timerid) < 0)
+                       die("timer_delete()");
+
+       self->timerid = 0;
+}
+
 void kvm__run(struct kvm *self)
 {
        int err;
index 606566192d353c9853ab2fc1b9e8a3b6e38fe4fe..7beb6a6b48f1609fe78d44e20b91a76eca5bc38a 100644 (file)
@@ -220,6 +220,7 @@ int main(int argc, char *argv[])
                }
        }
 exit_kvm:
+       disk_image__close(kvm->disk_image);
        kvm__delete(kvm);
 
        return 0;
@@ -230,6 +231,7 @@ panic_kvm:
        if (kvm->kvm_run->exit_reason == KVM_EXIT_UNKNOWN)
                fprintf(stderr, "KVM exit code: 0x%" PRIu64 "\n",
                        kvm->kvm_run->hw.hardware_exit_reason);
+       disk_image__close(kvm->disk_image);
        kvm__show_registers(kvm);
        kvm__show_code(kvm);
        kvm__show_page_tables(kvm);