Commit 48b74b32 authored by Alexandre Julliard's avatar Alexandre Julliard

server: Split get_thread_from_pid to allow lookups by tid or pid only.

parent f231a70f
......@@ -144,7 +144,12 @@ void sigchld_callback(void)
for (;;)
{
if (!(pid = wait4_wrapper( -1, &status, WUNTRACED | WNOHANG, NULL ))) break;
if (pid != -1) handle_child_status( get_thread_from_pid(pid), pid, status, -1 );
if (pid != -1)
{
struct thread *thread = get_thread_from_tid( pid );
if (!thread) thread = get_thread_from_pid( pid );
handle_child_status( thread, pid, status, -1 );
}
else break;
}
}
......
......@@ -297,15 +297,23 @@ struct thread *get_thread_from_handle( obj_handle_t handle, unsigned int access
access, &thread_ops );
}
/* find a thread from a Unix pid */
struct thread *get_thread_from_pid( int pid )
/* find a thread from a Unix tid */
struct thread *get_thread_from_tid( int tid )
{
struct thread *thread;
LIST_FOR_EACH_ENTRY( thread, &thread_list, struct thread, entry )
{
if (thread->unix_tid == pid) return thread;
if (thread->unix_tid == tid) return thread;
}
return NULL;
}
/* find a thread from a Unix pid */
struct thread *get_thread_from_pid( int pid )
{
struct thread *thread;
LIST_FOR_EACH_ENTRY( thread, &thread_list, struct thread, entry )
{
if (thread->unix_pid == pid) return thread;
......
......@@ -103,6 +103,7 @@ extern struct thread *current;
extern struct thread *create_thread( int fd, struct process *process );
extern struct thread *get_thread_from_id( thread_id_t id );
extern struct thread *get_thread_from_handle( obj_handle_t handle, unsigned int access );
extern struct thread *get_thread_from_tid( int tid );
extern struct thread *get_thread_from_pid( int pid );
extern void stop_thread( struct thread *thread );
extern int wake_thread( struct thread *thread );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment