Rebase against 9855fbe252ff3664d879e8cd9f5d1ea879af47dd.

This commit is contained in:
Zebediah Figura
2019-08-08 19:54:09 -05:00
parent 73f58bac41
commit c7780d90cb
10 changed files with 253 additions and 246 deletions

View File

@@ -1,4 +1,4 @@
From e13e9f7a5403d5aa7598bd788d9566ce445d3d67 Mon Sep 17 00:00:00 2001
From 08285be7bf233a38a95b0902c6bac9b24e1fe34f Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 22:04:29 -0500
Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
@@ -9,7 +9,7 @@ Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/server/thread.c b/server/thread.c
index a7dcf1088af..1bd09ff4810 100644
index f5bf4a8d2..b3da4a2f4 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -133,6 +133,7 @@ static const struct object_ops thread_apc_ops =
@@ -35,9 +35,9 @@ index a7dcf1088af..1bd09ff4810 100644
thread->entry_point = 0;
+ thread->esync_fd = -1;
thread->debug_ctx = NULL;
thread->debug_event = NULL;
thread->system_regs = 0;
@@ -293,6 +295,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
thread->queue = NULL;
@@ -292,6 +294,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
return NULL;
}
@@ -47,7 +47,7 @@ index a7dcf1088af..1bd09ff4810 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
return thread;
@@ -371,6 +376,9 @@ static void destroy_thread( struct object *obj )
@@ -370,6 +375,9 @@ static void destroy_thread( struct object *obj )
if (thread->exit_poll) remove_timeout_user( thread->exit_poll );
if (thread->id) free_ptid( thread->id );
if (thread->token) release_object( thread->token );
@@ -57,7 +57,7 @@ index a7dcf1088af..1bd09ff4810 100644
}
/* dump a thread on stdout for debugging purposes */
@@ -396,6 +404,12 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -395,6 +403,12 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
return mythread->state == TERMINATED && !mythread->exit_poll;
}
@@ -71,7 +71,7 @@ index a7dcf1088af..1bd09ff4810 100644
{
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | THREAD_QUERY_INFORMATION | THREAD_GET_CONTEXT;
diff --git a/server/thread.h b/server/thread.h
index d2b511145b9..29bf6b51359 100644
index 382b10b5b..dd06333fd 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -54,6 +54,7 @@ struct thread
@@ -80,8 +80,8 @@ index d2b511145b9..29bf6b51359 100644
struct list mutex_list; /* list of currently owned mutexes */
+ int esync_fd; /* esync file descriptor (signalled on exit) */
struct debug_ctx *debug_ctx; /* debugger context if this thread is a debugger */
struct debug_event *debug_event; /* debug event being sent to debugger */
unsigned int system_regs; /* which system regs have been set */
struct msg_queue *queue; /* message queue */
--
2.20.1
2.22.0

View File

@@ -1,4 +1,4 @@
From 241237ce6d96ac33915e002518b550d41baaf413 Mon Sep 17 00:00:00 2001
From f55b5ebadbc078201d81f5f53ad248be58bfac13 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 15 Jun 2018 14:12:22 -0500
Subject: [PATCH] server, ntdll: Implement alertable waits.
@@ -16,7 +16,7 @@ We do this quite simply by waiting on an extra eventfd descriptor, which the ser
8 files changed, 121 insertions(+), 17 deletions(-)
diff --git a/dlls/ntdll/esync.c b/dlls/ntdll/esync.c
index 119a36f3611..8a41f6961f9 100644
index 119a36f36..8a41f6961 100644
--- a/dlls/ntdll/esync.c
+++ b/dlls/ntdll/esync.c
@@ -684,19 +684,43 @@ static int do_poll( struct pollfd *fds, nfds_t nfds, ULONGLONG *end )
@@ -196,7 +196,7 @@ index 119a36f3611..8a41f6961f9 100644
NTSTATUS esync_signal_and_wait( HANDLE signal, HANDLE wait, BOOLEAN alertable,
diff --git a/dlls/ntdll/ntdll_misc.h b/dlls/ntdll/ntdll_misc.h
index 31714f90516..009dd33ede0 100644
index 31714f905..009dd33ed 100644
--- a/dlls/ntdll/ntdll_misc.h
+++ b/dlls/ntdll/ntdll_misc.h
@@ -239,6 +239,7 @@ struct ntdll_thread_data
@@ -208,7 +208,7 @@ index 31714f90516..009dd33ede0 100644
int request_fd; /* fd for sending server requests */
int reply_fd; /* fd for receiving server replies */
diff --git a/dlls/ntdll/thread.c b/dlls/ntdll/thread.c
index 95c175aa7fe..711505242c0 100644
index 95c175aa7..711505242 100644
--- a/dlls/ntdll/thread.c
+++ b/dlls/ntdll/thread.c
@@ -328,6 +328,7 @@ void thread_init(void)
@@ -228,7 +228,7 @@ index 95c175aa7fe..711505242c0 100644
pthread_attr_init( &pthread_attr );
pthread_attr_setstack( &pthread_attr, teb->DeallocationStack,
diff --git a/server/esync.c b/server/esync.c
index 5ef4dd282ee..4fb42e6f9d2 100644
index 5ef4dd282..4fb42e6f9 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -247,19 +247,25 @@ int esync_create_fd( int initval, int flags )
@@ -272,7 +272,7 @@ index 5ef4dd282ee..4fb42e6f9d2 100644
+ send_client_fd( current->process, current->esync_apc_fd, current->id );
+}
diff --git a/server/esync.h b/server/esync.h
index aeb58c5469c..cea025d9308 100644
index aeb58c546..cea025d93 100644
--- a/server/esync.h
+++ b/server/esync.h
@@ -21,6 +21,7 @@
@@ -284,7 +284,7 @@ index aeb58c5469c..cea025d9308 100644
void esync_clear( int fd );
diff --git a/server/protocol.def b/server/protocol.def
index 65a6696e38f..d577edc0e02 100644
index 65a6696e3..d577edc0e 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -4054,6 +4054,11 @@ struct handle_info
@@ -300,7 +300,7 @@ index 65a6696e38f..d577edc0e02 100644
{
ESYNC_SEMAPHORE = 1,
diff --git a/server/thread.c b/server/thread.c
index 9a014b15459..4b4e342243c 100644
index b7ed72a5c..fc751c2cb 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -188,6 +188,7 @@ static inline void init_thread_structure( struct thread *thread )
@@ -309,9 +309,9 @@ index 9a014b15459..4b4e342243c 100644
thread->esync_fd = -1;
+ thread->esync_apc_fd = -1;
thread->debug_ctx = NULL;
thread->debug_event = NULL;
thread->system_regs = 0;
@@ -296,7 +297,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
thread->queue = NULL;
@@ -295,7 +296,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
}
if (do_esync())
@@ -322,7 +322,7 @@ index 9a014b15459..4b4e342243c 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
@@ -1051,8 +1055,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
@@ -1050,8 +1054,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
grab_object( apc );
list_add_tail( queue, &apc->entry );
if (!list_prev( queue, &apc->entry )) /* first one */
@@ -336,7 +336,7 @@ index 9a014b15459..4b4e342243c 100644
return 1;
}
@@ -1099,6 +1108,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system_
@@ -1098,6 +1107,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system_
apc = LIST_ENTRY( ptr, struct thread_apc, entry );
list_remove( ptr );
}
@@ -348,7 +348,7 @@ index 9a014b15459..4b4e342243c 100644
}
diff --git a/server/thread.h b/server/thread.h
index 29bf6b51359..620f8aa9c81 100644
index dd06333fd..a62559dc4 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -55,6 +55,7 @@ struct thread
@@ -357,8 +357,8 @@ index 29bf6b51359..620f8aa9c81 100644
int esync_fd; /* esync file descriptor (signalled on exit) */
+ int esync_apc_fd; /* esync apc fd (signalled when APCs are present) */
struct debug_ctx *debug_ctx; /* debugger context if this thread is a debugger */
struct debug_event *debug_event; /* debug event being sent to debugger */
unsigned int system_regs; /* which system regs have been set */
struct msg_queue *queue; /* message queue */
--
2.20.1
2.22.0