Free the handles of the event structure in the right process (thanks
to Jeremy White).
diff --git a/server/debugger.c b/server/debugger.c
index ef8e99d..6ebdea6 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -100,22 +100,22 @@
}
/* free a debug event structure */
-static void free_event( struct debug_event *event )
+static void free_event( struct thread *debugger, struct debug_event *event )
{
switch(event->code)
{
case CREATE_THREAD_DEBUG_EVENT:
- close_handle( event->thread->process, event->data.create_thread.handle );
+ close_handle( debugger->process, event->data.create_thread.handle );
break;
case CREATE_PROCESS_DEBUG_EVENT:
if (event->data.create_process.file != -1)
- close_handle( event->thread->process, event->data.create_process.file );
- close_handle( event->thread->process, event->data.create_process.thread );
- close_handle( event->thread->process, event->data.create_process.process );
+ close_handle( debugger->process, event->data.create_process.file );
+ close_handle( debugger->process, event->data.create_process.thread );
+ close_handle( debugger->process, event->data.create_process.process );
break;
case LOAD_DLL_DEBUG_EVENT:
if (event->data.load_dll.handle != -1)
- close_handle( event->thread->process, event->data.load_dll.handle );
+ close_handle( debugger->process, event->data.load_dll.handle );
break;
}
event->thread->debug_event = NULL;
@@ -238,7 +238,7 @@
req->status = status;
send_reply( thread );
}
- free_event( event );
+ free_event( current, event );
resume_process( process );
return 1;
}
@@ -274,7 +274,7 @@
/* only exit events can replace others */
assert( code == EXIT_THREAD_DEBUG_EVENT || code == EXIT_PROCESS_DEBUG_EVENT );
if (!thread->debug_event->sent) unlink_event( debug_ctx, thread->debug_event );
- free_event( thread->debug_event );
+ free_event( debugger, thread->debug_event );
}
link_event( debug_ctx, event );
@@ -368,7 +368,7 @@
while ((event = debug_ctx->event_head) != NULL)
{
unlink_event( debug_ctx, event );
- free_event( event );
+ free_event( thread, event );
}
/* remove the timeout */
if (debug_ctx->timeout) remove_timeout_user( debug_ctx->timeout );