File tree Expand file tree Collapse file tree 4 files changed +38
-1
lines changed Expand file tree Collapse file tree 4 files changed +38
-1
lines changed Original file line number Diff line number Diff line change @@ -173,6 +173,27 @@ ds_ipc_free (DiagnosticsIpc *ipc)
173
173
ep_rt_object_free (ipc );
174
174
}
175
175
176
+ void
177
+ ds_ipc_reset (DiagnosticsIpc * ipc )
178
+ {
179
+ if (!ipc )
180
+ return ;
181
+
182
+ if (ipc -> pipe != INVALID_HANDLE_VALUE ) {
183
+ DisconnectNamedPipe (ipc -> pipe );
184
+ CloseHandle (ipc -> pipe );
185
+ ipc -> pipe = INVALID_HANDLE_VALUE ;
186
+ }
187
+
188
+ if (ipc -> overlap .hEvent != INVALID_HANDLE_VALUE ) {
189
+ CloseHandle (ipc -> overlap .hEvent );
190
+ }
191
+
192
+ memset (& ipc -> overlap , 0 , sizeof (OVERLAPPED )); // clear the overlapped objects state
193
+ ipc -> overlap .hEvent = INVALID_HANDLE_VALUE ;
194
+ ipc -> is_listening = false;
195
+ }
196
+
176
197
int32_t
177
198
ds_ipc_poll (
178
199
DiagnosticsIpcPollHandle * poll_handles_data ,
@@ -192,6 +213,10 @@ ds_ipc_poll (
192
213
// SERVER
193
214
EP_ASSERT (poll_handles_data [i ].ipc -> mode == DS_IPC_CONNECTION_MODE_LISTEN );
194
215
handles [i ] = poll_handles_data [i ].ipc -> overlap .hEvent ;
216
+ if (handles [i ] == INVALID_HANDLE_VALUE ) {
217
+ // Invalid handle, wait will fail. Signal error
218
+ poll_handles_data [i ].events = DS_IPC_POLL_EVENTS_ERR ;
219
+ }
195
220
} else {
196
221
// CLIENT
197
222
bool success = true;
Original file line number Diff line number Diff line change @@ -1064,6 +1064,11 @@ ds_ipc_free (DiagnosticsIpc *ipc)
1064
1064
ep_rt_object_free (ipc );
1065
1065
}
1066
1066
1067
+ void
1068
+ ds_ipc_reset (DiagnosticsIpc * ipc )
1069
+ {
1070
+ }
1071
+
1067
1072
int32_t
1068
1073
ds_ipc_poll (
1069
1074
DiagnosticsIpcPollHandle * poll_handles_data ,
Original file line number Diff line number Diff line change @@ -35,6 +35,9 @@ ds_ipc_alloc (
35
35
void
36
36
ds_ipc_free (DiagnosticsIpc * ipc );
37
37
38
+ void
39
+ ds_ipc_reset (DiagnosticsIpc * ipc );
40
+
38
41
// Poll
39
42
// Parameters:
40
43
// - IpcPollHandle * poll_handles_data: Array of IpcPollHandles to poll
Original file line number Diff line number Diff line change @@ -839,7 +839,11 @@ listen_port_reset (
839
839
ds_ipc_error_callback_func callback )
840
840
{
841
841
EP_ASSERT (object != NULL );
842
- return ;
842
+ #ifdef _WIN32
843
+ DiagnosticsListenPort * listen_port = (DiagnosticsListenPort * )object ;
844
+ ds_ipc_reset (listen_port -> port .ipc );
845
+ ds_ipc_listen (listen_port -> port .ipc , callback );
846
+ #endif // _WIN32
843
847
}
844
848
845
849
static DiagnosticsPortVtable listen_port_vtable = {
You can’t perform that action at this time.
0 commit comments