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 );