From: Dmitry Timoshkov <dmitry(a)baikal.ru> Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> --- server/process.c | 2 +- server/queue.c | 5 ++++- server/thread.c | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/process.c b/server/process.c index f6d1641cb94..733b0288f72 100644 --- a/server/process.c +++ b/server/process.c @@ -1686,7 +1686,7 @@ DECL_HANDLER(get_process_idle_event) reply->event = 0; if ((process = get_process_from_handle( req->handle, PROCESS_QUERY_INFORMATION ))) { - if (process->idle_event && process != current->process) + if (process->idle_event) reply->event = alloc_handle( current->process, process->idle_event, EVENT_ALL_ACCESS, 0 ); release_object( process ); diff --git a/server/queue.c b/server/queue.c index e881e40271d..8c2b823488e 100644 --- a/server/queue.c +++ b/server/queue.c @@ -1106,11 +1106,14 @@ static int msg_queue_add_queue( struct object *obj, struct wait_queue_entry *ent set_error( STATUS_ACCESS_DENIED ); return 0; } + + add_queue( obj, entry ); + if (process->idle_event && !(queue->wake_mask & QS_SMRESULT)) set_event( process->idle_event ); if (queue->fd && list_empty( &obj->wait_queue )) /* first on the queue */ set_fd_events( queue->fd, POLLIN ); - add_queue( obj, entry ); + return 1; } diff --git a/server/thread.c b/server/thread.c index 55bd63d3030..35f925eaa02 100644 --- a/server/thread.c +++ b/server/thread.c @@ -998,6 +998,8 @@ static int select_on( const select_op_t *select_op, data_size_t op_size, client_ } if (!wait_on_handles( select_op, count, select_op->wait.handles, flags, when )) return 1; + /* check if we woke ourselves up */ + if (!current->wait) return 1; break; case SELECT_SIGNAL_AND_WAIT: -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/5789