Signal and release the idle event when the process main thread exits.
diff --git a/server/queue.c b/server/queue.c index ae2486e..e250fae 100644 --- a/server/queue.c +++ b/server/queue.c
@@ -163,6 +163,27 @@ return queue; } +/* free the message queue of a thread at thread exit */ +void free_msg_queue( struct thread *thread ) +{ + struct process *process = thread->process; + + if (!thread->queue) return; + if (process->queue == thread->queue) /* is it the process main queue? */ + { + release_object( process->queue ); + process->queue = NULL; + if (process->idle_event) + { + set_event( process->idle_event ); + release_object( process->idle_event ); + process->idle_event = NULL; + } + } + release_object( thread->queue ); + thread->queue = NULL; +} + /* check the queue status */ inline static int is_signaled( struct msg_queue *queue ) {