Moved idle event handling to the server.
diff --git a/server/process.c b/server/process.c
index 733b693..987bdd8 100644
--- a/server/process.c
+++ b/server/process.c
@@ -137,6 +137,8 @@
req->hstderr = alloc_handle( process, process->console_out,
GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE, 1 );
}
+ /* some handles above may have been invalid; this is not an error */
+ if (get_error() == STATUS_INVALID_HANDLE) clear_error();
return 1;
}
@@ -165,6 +167,8 @@
process->console_in = NULL;
process->console_out = NULL;
process->init_event = NULL;
+ process->idle_event = NULL;
+ process->queue = NULL;
process->ldt_copy = NULL;
process->ldt_flags = NULL;
process->exe.next = NULL;
@@ -282,6 +286,8 @@
if (process->prev) process->prev->next = process->next;
else first_process = process->next;
if (process->init_event) release_object( process->init_event );
+ if (process->idle_event) release_object( process->idle_event );
+ if (process->queue) release_object( process->queue );
if (process->exe.file) release_object( process->exe.file );
}
@@ -813,6 +819,7 @@
set_event( process->init_event );
release_object( process->init_event );
process->init_event = NULL;
+ if (req->gui) process->idle_event = create_event( NULL, 0, 1, 0 );
if (current->suspend + current->process->suspend > 0) stop_thread( current );
req->debugged = (current->process->debugger != 0);
}
@@ -919,3 +926,19 @@
{
process_unload_dll( current->process, req->base );
}
+
+/* wait for a process to start waiting on input */
+/* FIXME: only returns event for now, wait is done in the client */
+DECL_HANDLER(wait_input_idle)
+{
+ struct process *process;
+
+ req->event = -1;
+ if ((process = get_process_from_handle( req->handle, PROCESS_QUERY_INFORMATION )))
+ {
+ if (process->idle_event && process != current->process && process->queue != current->queue)
+ req->event = alloc_handle( current->process, process->idle_event,
+ EVENT_ALL_ACCESS, 0 );
+ release_object( process );
+ }
+}