Generate CREATE_PROCESS/THREAD debug events internally in the server.
diff --git a/scheduler/debugger.c b/scheduler/debugger.c
index 8a09485..f8357d1 100644
--- a/scheduler/debugger.c
+++ b/scheduler/debugger.c
@@ -6,8 +6,8 @@
#include <string.h>
+#include "winerror.h"
#include "process.h"
-#include "thread.h"
#include "server.h"
#include "debugtools.h"
@@ -22,7 +22,6 @@
DWORD DEBUG_SendExceptionEvent( EXCEPTION_RECORD *rec, BOOL first_chance, CONTEXT *context )
{
int i;
- DWORD ret = 0;
struct send_debug_event_request *req = get_req_buffer();
req->event.code = EXCEPTION_DEBUG_EVENT;
@@ -35,58 +34,9 @@
req->event.info.exception.context = *context;
for (i = 0; i < req->event.info.exception.nb_params; i++)
req->event.info.exception.params[i] = rec->ExceptionInformation[i];
- if (!server_call( REQ_SEND_DEBUG_EVENT ))
- {
- ret = req->status;
+ if (!server_call_noerr( REQ_SEND_DEBUG_EVENT ))
*context = req->event.info.exception.context;
- }
- return ret;
-}
-
-
-/**********************************************************************
- * DEBUG_SendCreateProcessEvent
- *
- * Send an CREATE_PROCESS_DEBUG_EVENT event to the current process debugger.
- * Must be called from the context of the new process.
- */
-DWORD DEBUG_SendCreateProcessEvent( HFILE file, HMODULE module, void *entry )
-{
- DWORD ret = 0;
- struct send_debug_event_request *req = get_req_buffer();
-
- req->event.code = CREATE_PROCESS_DEBUG_EVENT;
- req->event.info.create_process.file = file;
- req->event.info.create_process.process = 0; /* will be filled by server */
- req->event.info.create_process.thread = 0; /* will be filled by server */
- req->event.info.create_process.base = (void *)module;
- req->event.info.create_process.dbg_offset = 0; /* FIXME */
- req->event.info.create_process.dbg_size = 0; /* FIXME */
- req->event.info.create_process.teb = NtCurrentTeb();
- req->event.info.create_process.start = entry;
- req->event.info.create_process.name = 0; /* FIXME */
- req->event.info.create_process.unicode = 0; /* FIXME */
- if (!server_call( REQ_SEND_DEBUG_EVENT )) ret = req->status;
- return ret;
-}
-
-/**********************************************************************
- * DEBUG_SendCreateThreadEvent
- *
- * Send an CREATE_THREAD_DEBUG_EVENT event to the current process debugger.
- * Must be called from the context of the new thread.
- */
-DWORD DEBUG_SendCreateThreadEvent( void *entry )
-{
- DWORD ret = 0;
- struct send_debug_event_request *req = get_req_buffer();
-
- req->event.code = CREATE_THREAD_DEBUG_EVENT;
- req->event.info.create_thread.handle = 0; /* will be filled by server */
- req->event.info.create_thread.teb = NtCurrentTeb();
- req->event.info.create_thread.start = entry;
- if (!server_call( REQ_SEND_DEBUG_EVENT )) ret = req->status;
- return ret;
+ return req->status;
}
@@ -97,7 +47,6 @@
*/
DWORD DEBUG_SendLoadDLLEvent( HFILE file, HMODULE module, LPSTR *name )
{
- DWORD ret = 0;
struct send_debug_event_request *req = get_req_buffer();
req->event.code = LOAD_DLL_DEBUG_EVENT;
@@ -107,8 +56,8 @@
req->event.info.load_dll.dbg_size = 0; /* FIXME */
req->event.info.load_dll.name = name;
req->event.info.load_dll.unicode = 0;
- if (!server_call( REQ_SEND_DEBUG_EVENT )) ret = req->status;
- return ret;
+ server_call_noerr( REQ_SEND_DEBUG_EVENT );
+ return req->status;
}
@@ -119,13 +68,12 @@
*/
DWORD DEBUG_SendUnloadDLLEvent( HMODULE module )
{
- DWORD ret = 0;
struct send_debug_event_request *req = get_req_buffer();
req->event.code = UNLOAD_DLL_DEBUG_EVENT;
req->event.info.unload_dll.base = (void *)module;
- if (!server_call( REQ_SEND_DEBUG_EVENT )) ret = req->status;
- return ret;
+ server_call_noerr( REQ_SEND_DEBUG_EVENT );
+ return req->status;
}
@@ -155,6 +103,9 @@
event->dwThreadId = (DWORD)req->tid;
switch(req->event.code)
{
+ case 0: /* timeout */
+ SetLastError( ERROR_SEM_TIMEOUT );
+ return FALSE;
case EXCEPTION_DEBUG_EVENT:
event->u.Exception.ExceptionRecord.ExceptionCode = req->event.info.exception.code;
event->u.Exception.ExceptionRecord.ExceptionFlags = req->event.info.exception.flags;