Use SIGUSR1 instead of SIGSTOP to suspend threads.
diff --git a/scheduler/client.c b/scheduler/client.c
index ef6db59..466fef7 100644
--- a/scheduler/client.c
+++ b/scheduler/client.c
@@ -653,6 +653,8 @@
sigaddset( &block_set, SIGIO );
sigaddset( &block_set, SIGINT );
sigaddset( &block_set, SIGHUP );
+ sigaddset( &block_set, SIGUSR1 );
+ sigaddset( &block_set, SIGUSR2 );
/* receive the first thread request fd on the main socket */
NtCurrentTeb()->request_fd = receive_fd( &dummy_handle );
diff --git a/scheduler/process.c b/scheduler/process.c
index 2d1eb95..ea9a305 100644
--- a/scheduler/process.c
+++ b/scheduler/process.c
@@ -508,6 +508,14 @@
console_app = (nt->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI);
if (console_app) current_process.flags |= PDB32_CONSOLE_PROC;
+ /* Install signal handlers; this cannot be done before, since we cannot
+ * send exceptions to the debugger before the create process event that
+ * is sent by REQ_INIT_PROCESS_DONE.
+ * We do need the handlers in place by the time the request is over, so
+ * we set them up here. If we segfault between here and the server call
+ * something is very wrong... */
+ if (!SIGNAL_Init()) goto error;
+
/* Signal the parent process to continue */
SERVER_START_REQ( init_process_done )
{
@@ -524,11 +532,6 @@
}
SERVER_END_REQ;
- /* Install signal handlers; this cannot be done before, since we cannot
- * send exceptions to the debugger before the create process event that
- * is sent by REQ_INIT_PROCESS_DONE */
- if (!SIGNAL_Init()) goto error;
-
/* create the main modref and load dependencies */
if (!(wm = PE_CreateModule( current_process.module, main_exe_name, 0, 0, FALSE )))
goto error;