|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/4] Ensure handles are closed when pipe disconnects
From: Owen Smith <owen.smith@xxxxxxxxxx>
Fixes leaks where the pipe handles were not closed, preventing new
connections. Fixes the MONITOR_PIPE context leaking when its thread
is stopped.
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/monitor/monitor.c | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c
index 3e535e4..112ce65 100644
--- a/src/monitor/monitor.c
+++ b/src/monitor/monitor.c
@@ -469,6 +469,10 @@ PipeThread(
CloseHandle(Overlapped.hEvent);
+ CloseHandle(Pipe->Pipe);
+ CloseHandle(Pipe->Thread);
+ free(Pipe);
+
Log("<====");
return 0;
@@ -525,7 +529,7 @@ ServerThread(
0,
NULL);
if (Pipe == INVALID_HANDLE_VALUE)
- break;
+ goto fail2;
(VOID) ConnectNamedPipe(Pipe,
&Overlapped);
@@ -534,15 +538,17 @@ ServerThread(
Handle,
FALSE,
INFINITE);
- if (Object == WAIT_OBJECT_0)
+ if (Object == WAIT_OBJECT_0) {
+ CloseHandle(Pipe);
break;
+ }
ResetEvent(Overlapped.hEvent);
Instance = (PMONITOR_PIPE)malloc(sizeof(MONITOR_PIPE));
if (Instance == NULL) {
CloseHandle(Pipe);
- break;
+ goto fail3;
}
__InitializeListHead(&Instance->ListEntry);
@@ -557,7 +563,7 @@ ServerThread(
if (Instance->Thread == INVALID_HANDLE_VALUE) {
free(Instance);
CloseHandle(Pipe);
- break;
+ goto fail4;
}
}
@@ -567,6 +573,12 @@ ServerThread(
return 0;
+fail4:
+ Log("fail4\n");
+fail3:
+ Log("fail3\n");
+fail2:
+ Log("fail2\n");
fail1:
Error = GetLastError();
--
2.8.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |