[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC PATCH v2 41/49] tap-win32: destroy the thread at exit
From: |
Pavel Dovgalyuk |
Subject: |
[Qemu-devel] [RFC PATCH v2 41/49] tap-win32: destroy the thread at exit |
Date: |
Thu, 17 Jul 2014 15:05:48 +0400 |
User-agent: |
StGit/0.16 |
This patch fixes resource leak caused by created thread which is not destroyed
at exit.
Signed-off-by: Pavel Dovgalyuk <address@hidden>
---
net/tap-win32.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/net/tap-win32.c b/net/tap-win32.c
index 8aee611..efd1c75 100644
--- a/net/tap-win32.c
+++ b/net/tap-win32.c
@@ -99,6 +99,7 @@ typedef struct tap_win32_overlapped {
HANDLE output_queue_semaphore;
HANDLE free_list_semaphore;
HANDLE tap_semaphore;
+ HANDLE hThread;
CRITICAL_SECTION output_queue_cs;
CRITICAL_SECTION free_list_cs;
OVERLAPPED read_overlapped;
@@ -625,8 +626,9 @@ static int tap_win32_open(tap_win32_overlapped_t **phandle,
*phandle = &tap_overlapped;
- CreateThread(NULL, 0, tap_win32_thread_entry,
- (LPVOID)&tap_overlapped, 0, &idThread);
+ tap_overlapped.hThread = CreateThread(NULL, 0, tap_win32_thread_entry,
+ (LPVOID)&tap_overlapped,
+ 0, &idThread);
return 0;
}
@@ -643,9 +645,8 @@ static void tap_cleanup(NetClientState *nc)
qemu_del_wait_object(s->handle->tap_semaphore, NULL, NULL);
- /* FIXME: need to kill thread and close file handle:
- tap_win32_close(s);
- */
+ TerminateThread(s->handle->hThread, 0);
+ CloseHandle(s->handle->handle);
}
static ssize_t tap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
- [Qemu-devel] [RFC PATCH v2 27/49] vga: do not use virtual clock for blinking cursor, (continued)
- [Qemu-devel] [RFC PATCH v2 27/49] vga: do not use virtual clock for blinking cursor, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 15/49] softmmu: fixing usage of cpu_st/ld* from helpers, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 32/49] replay: checkpoints, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 26/49] replay: interrupts and exceptions, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 19/49] replay: global variables and function stubs, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 36/49] pl031: vmstate in replay mode, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 35/49] replay: thread pool, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 28/49] replay: asynchronous events infrastructure, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 37/49] replay: initialization and deinitialization, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 11/49] piix: do not raise irq while loading vmstate, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 41/49] tap-win32: destroy the thread at exit,
Pavel Dovgalyuk <=
- [Qemu-devel] [RFC PATCH v2 14/49] ide pci: reset status field before loading the vmstate, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 30/49] replay: recording and replaying different timers, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 40/49] replay: recording of the user input, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 34/49] replay: replay aio requests, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 21/49] sysemu: system functions for replay, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 23/49] cpu: invent instruction count for accurate replay, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 16/49] target: save cpu state fields, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 29/49] replay: recording and replaying clock ticks, Pavel Dovgalyuk, 2014/07/17
- [Qemu-devel] [RFC PATCH v2 12/49] mc146818rtc: add missed field to vmstate, Pavel Dovgalyuk, 2014/07/17