kvm tools: Free memory and FDs on exit
PATCH 1/1 kvm tools: Free memory and FDs on exit
Please ignore previous mail, Silly copy&paste mistake on the signed-off :)
Following patch adds more cleanup code when exiting. Close disk image, free msrs array and destroy the timer fd.
---
tools/kvm/include/kvm/kvm.h | 1 + tools/kvm/kvm.c | 14 ++++++++++++++ tools/kvm/main.c | 4 +++- 3 files changed, 18 insertions(+), 1 deletions(-)
tools/kvm/include/kvm/kvm.h +0 -0
@@ -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);
tools/kvm/kvm.c +14 -0
@@ -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;
tools/kvm/main.c +3 -1
@@ -220,7 +220,8 @@ int main(int argc, char *argv[]) } } exit_kvm: -kvm__delete (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);
Pekka Enberg
AppliedQuoted 4 lines · Sasha Levin
Following patch adds more cleanup code when exiting. Close disk image, free msrs array and destroy the timer fd.
Signed-off-by Sasha Levin <[email protected]>
Applied, thanks!
Quoted 82 lines
---
tools/kvm/include/kvm/kvm.h | 1 +
tools/kvm/kvm.c| 14 ++++++++++++++tools/kvm/main.c| 4 +++-3 files changed, 18 insertions(+), 1 deletions(-)tools/kvm/include/kvm/kvm.h +1
-0@@ -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);tools/kvm/kvm.c +14
-0@@ -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;tools/kvm/main.c +0
-0@@ -220,7 +220,8 @@ int main(int argc, char *argv[]) } }exit_kvm:
-kvm__delete(kvm);
+disk_image__close(kvm->disk_image);
+kvm__delete(kvm);return 0;
tools/kvm/main.c +1
-1@@ -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); --To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html