Added new CLIENT_DebuggerRequest routine, implemented support for
DEBUGGER_FREEZE_ALL/DEBUGGER_UNFREEZE_ALL requests.
Run wine server in the main wine process.
Bugfix: never free initial thread!
diff --git a/include/server.h b/include/server.h
index 4e56dc4..fe14a9b 100644
--- a/include/server.h
+++ b/include/server.h
@@ -195,6 +195,15 @@
};
+/* Debugger support: freeze / unfreeze */
+struct debugger_request
+{
+ int op; /* operation type */
+};
+
+enum debugger_op { DEBUGGER_FREEZE_ALL, DEBUGGER_UNFREEZE_ALL };
+
+
/* Queue an APC for a thread */
struct queue_apc_request
{
@@ -694,6 +703,7 @@
struct _THDB;
extern int CLIENT_SetDebug( int level );
+extern int CLIENT_DebuggerRequest( int op );
extern int CLIENT_InitThread(void);
#endif /* __WINE_SERVER__ */
diff --git a/include/server/request.h b/include/server/request.h
index 56ecfaa..6167edd 100644
--- a/include/server/request.h
+++ b/include/server/request.h
@@ -18,6 +18,7 @@
REQ_SET_THREAD_INFO,
REQ_SUSPEND_THREAD,
REQ_RESUME_THREAD,
+ REQ_DEBUGGER,
REQ_QUEUE_APC,
REQ_CLOSE_HANDLE,
REQ_GET_HANDLE_INFO,
@@ -80,6 +81,7 @@
DECL_HANDLER(set_thread_info);
DECL_HANDLER(suspend_thread);
DECL_HANDLER(resume_thread);
+DECL_HANDLER(debugger);
DECL_HANDLER(queue_apc);
DECL_HANDLER(close_handle);
DECL_HANDLER(get_handle_info);
@@ -139,6 +141,7 @@
{ (void(*)())req_set_thread_info, sizeof(struct set_thread_info_request) },
{ (void(*)())req_suspend_thread, sizeof(struct suspend_thread_request) },
{ (void(*)())req_resume_thread, sizeof(struct resume_thread_request) },
+ { (void(*)())req_debugger, sizeof(struct debugger_request) },
{ (void(*)())req_queue_apc, sizeof(struct queue_apc_request) },
{ (void(*)())req_close_handle, sizeof(struct close_handle_request) },
{ (void(*)())req_get_handle_info, sizeof(struct get_handle_info_request) },
diff --git a/include/server/thread.h b/include/server/thread.h
index af56773..bc77a37 100644
--- a/include/server/thread.h
+++ b/include/server/thread.h
@@ -59,6 +59,8 @@
struct set_thread_info_request *req );
extern int suspend_thread( struct thread *thread );
extern int resume_thread( struct thread *thread );
+extern void suspend_all_threads( void );
+extern void resume_all_threads( void );
extern int send_reply( struct thread *thread, int pass_fd,
int n, ... /* arg_1, len_1, ..., arg_n, len_n */ );
extern int add_queue( struct object *obj, struct wait_queue_entry *entry );