Rebase against 4ccf7498aac20b2b0afa2118f8d919718e5fcbbe.

This commit is contained in:
Zebediah Figura
2021-04-27 20:03:45 -05:00
parent 552dc36846
commit 592b9480ef
8 changed files with 56 additions and 56 deletions

View File

@@ -1,4 +1,4 @@
From f2dc92d71f8d78d6396c6c98010d4709696ac43c Mon Sep 17 00:00:00 2001
From a1368a522fdc4e741fee7bfbd84eec632bcf4ce0 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 15:11:12 -0500
Subject: [PATCH] server: Create eventfd file descriptors for process objects.
@@ -49,7 +49,7 @@ index 7ca4ca89394..6a0a367124d 100644
void esync_init(void);
+int esync_create_fd( int initval, int flags );
diff --git a/server/process.c b/server/process.c
index af7aef0cdac..0be707404f4 100644
index e144593445d..f9468c771d0 100644
--- a/server/process.c
+++ b/server/process.c
@@ -49,6 +49,7 @@
@@ -77,7 +77,7 @@ index af7aef0cdac..0be707404f4 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -555,6 +557,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -555,6 +557,7 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla
process->trace_data = 0;
process->rawinput_mouse = NULL;
process->rawinput_kbd = NULL;
@@ -85,7 +85,7 @@ index af7aef0cdac..0be707404f4 100644
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
@@ -609,6 +612,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -611,6 +614,9 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla
if (!token_assign_label( process->token, security_high_label_sid ))
goto error;
@@ -95,7 +95,7 @@ index af7aef0cdac..0be707404f4 100644
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
return process;
@@ -655,6 +661,7 @@ static void process_destroy( struct object *obj )
@@ -657,6 +663,7 @@ static void process_destroy( struct object *obj )
if (process->token) release_object( process->token );
free( process->dir_cache );
free( process->image );
@@ -103,7 +103,7 @@ index af7aef0cdac..0be707404f4 100644
}
/* dump a process on stdout for debugging purposes */
@@ -672,6 +679,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -674,6 +681,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}
@@ -118,7 +118,7 @@ index af7aef0cdac..0be707404f4 100644
{
access = default_map_access( obj, access );
diff --git a/server/process.h b/server/process.h
index 0997a759330..638497857b3 100644
index 0e1a83859d9..71aae9c9494 100644
--- a/server/process.h
+++ b/server/process.h
@@ -87,6 +87,7 @@ struct process
@@ -128,7 +128,7 @@ index 0997a759330..638497857b3 100644
+ int esync_fd; /* esync file descriptor (signaled on exit) */
};
#define CPU_FLAG(cpu) (1 << (cpu))
/* process functions */
--
2.30.1
2.30.2

View File

@@ -1,4 +1,4 @@
From 6f58d9519f2f2c440e6e64159a09f877a4a83c88 Mon Sep 17 00:00:00 2001
From 7476e7b2e8680352cf2e1de7552ae58e11ff7869 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 15:19:37 -0500
Subject: [PATCH] ntdll, server: Implement waiting on server-bound objects.
@@ -161,7 +161,7 @@ index 4f993689e0d..6fd195df759 100644
/* Don't grab the object, just check if it's signaled. */
if (fds[i].revents & POLLIN)
diff --git a/server/esync.c b/server/esync.c
index 61513333bfd..5f6e60ab24c 100644
index e18b76bff5b..2b9307267f9 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -315,6 +315,22 @@ int esync_create_fd( int initval, int flags )
@@ -197,7 +197,7 @@ index 6a0a367124d..1e12560ddd6 100644
int esync_create_fd( int initval, int flags );
+void esync_wake_up( struct object *obj );
diff --git a/server/thread.c b/server/thread.c
index 1bde63120ed..abe1bd44982 100644
index 1e6f60182df..0413e889c7d 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -51,6 +51,7 @@
@@ -207,8 +207,8 @@ index 1bde63120ed..abe1bd44982 100644
+#include "esync.h"
#ifdef __i386__
@@ -1047,6 +1048,9 @@ void wake_up( struct object *obj, int max )
/* thread queues */
@@ -1053,6 +1054,9 @@ void wake_up( struct object *obj, int max )
struct list *ptr;
int ret;
@@ -219,5 +219,5 @@ index 1bde63120ed..abe1bd44982 100644
{
struct wait_queue_entry *entry = LIST_ENTRY( ptr, struct wait_queue_entry, entry );
--
2.28.0
2.30.2

View File

@@ -1,4 +1,4 @@
From abe8fc2432fa484ab121005ad21a92c0c27668b7 Mon Sep 17 00:00:00 2001
From 39109644ddeb39a7a42c2f10657b35c515dfee46 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <zfigura@codeweavers.com>
Date: Mon, 6 Jul 2020 17:17:31 -0500
Subject: [PATCH] ntdll, server: Implement alertable waits.
@@ -164,10 +164,10 @@ index d1a282c65e9..2a7c3865617 100644
/* We need to let the server know when we are doing a message wait, and when we
diff --git a/dlls/ntdll/unix/unix_private.h b/dlls/ntdll/unix/unix_private.h
index 1d6ba95d2a1..9c8e334aba6 100644
index a5bade02b8a..76eef4220c5 100644
--- a/dlls/ntdll/unix/unix_private.h
+++ b/dlls/ntdll/unix/unix_private.h
@@ -50,6 +50,7 @@ struct ntdll_thread_data
@@ -53,6 +53,7 @@ struct ntdll_thread_data
void *cpu_data[16]; /* reserved for CPU-specific data */
struct debug_info *debug_info; /* info for debugstr functions */
void *start_stack; /* stack for thread startup */
@@ -176,19 +176,19 @@ index 1d6ba95d2a1..9c8e334aba6 100644
int reply_fd; /* fd for receiving server replies */
int wait_fd[2]; /* fd for sleeping server requests */
diff --git a/dlls/ntdll/unix/virtual.c b/dlls/ntdll/unix/virtual.c
index c1e79a210f4..5631414bf4c 100644
index f3e6b612b93..04c31a473af 100644
--- a/dlls/ntdll/unix/virtual.c
+++ b/dlls/ntdll/unix/virtual.c
@@ -2565,6 +2565,7 @@ static void init_teb( TEB *teb, PEB *peb )
InitializeListHead( &teb->ActivationContextStack.FrameListCache );
@@ -2876,6 +2876,7 @@ static TEB *init_teb( void *ptr, PEB *peb )
teb->StaticUnicodeString.Buffer = teb->StaticUnicodeBuffer;
teb->StaticUnicodeString.MaximumLength = sizeof(teb->StaticUnicodeBuffer);
thread_data = (struct ntdll_thread_data *)&teb->GdiTebBatch;
+ thread_data->esync_apc_fd = -1;
thread_data->request_fd = -1;
thread_data->reply_fd = -1;
thread_data->wait_fd[0] = -1;
diff --git a/server/esync.c b/server/esync.c
index 7b5b0761516..33a448d0a57 100644
index ad5403bd4e0..3aa3a22df68 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -348,19 +348,25 @@ int esync_create_fd( int initval, int flags )
@@ -244,10 +244,10 @@ index aeb58c5469c..cea025d9308 100644
void esync_clear( int fd );
diff --git a/server/protocol.def b/server/protocol.def
index f2ad5a88b28..56237afdcad 100644
index 00c89cce793..bb45c509685 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3717,3 +3717,7 @@ enum esync_type
@@ -3738,3 +3738,7 @@ enum esync_type
@REQ(esync_msgwait)
int in_msgwait; /* are we in a message wait? */
@END
@@ -256,7 +256,7 @@ index f2ad5a88b28..56237afdcad 100644
+@REQ(get_esync_apc_fd)
+@END
diff --git a/server/thread.c b/server/thread.c
index 48c3eae7413..83f80740a46 100644
index 409a28129b3..e4781e57c8c 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -227,6 +227,7 @@ static inline void init_thread_structure( struct thread *thread )
@@ -267,7 +267,7 @@ index 48c3eae7413..83f80740a46 100644
thread->system_regs = 0;
thread->queue = NULL;
thread->wait = NULL;
@@ -363,7 +364,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
@@ -374,7 +375,10 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
}
if (do_esync())
@@ -278,7 +278,7 @@ index 48c3eae7413..83f80740a46 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
@@ -1150,8 +1154,13 @@ static int queue_apc( struct process *process, struct thread *thread, struct thr
@@ -1156,8 +1160,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 */
@@ -292,7 +292,7 @@ index 48c3eae7413..83f80740a46 100644
return 1;
}
@@ -1197,6 +1206,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
@@ -1203,6 +1212,10 @@ static struct thread_apc *thread_dequeue_apc( struct thread *thread, int system
apc = LIST_ENTRY( ptr, struct thread_apc, entry );
list_remove( ptr );
}
@@ -304,7 +304,7 @@ index 48c3eae7413..83f80740a46 100644
}
diff --git a/server/thread.h b/server/thread.h
index 99904557d44..f41c3ddd61e 100644
index 1eb501cbd52..13e4628d89a 100644
--- a/server/thread.h
+++ b/server/thread.h
@@ -55,6 +55,7 @@ struct thread
@@ -316,5 +316,5 @@ index 99904557d44..f41c3ddd61e 100644
struct msg_queue *queue; /* message queue */
struct thread_wait *wait; /* current wait condition if sleeping */
--
2.29.2
2.30.2