Rebase against 4f1b297a14bbd304fb20da7c4b64266c14d110e5.

This commit is contained in:
Zebediah Figura
2021-02-05 18:01:09 -06:00
parent a2f82c5c85
commit 677b445b0d
24 changed files with 105 additions and 1969 deletions

View File

@@ -1,4 +1,4 @@
From d468fdd5f1b4351f357fa75628096c6d759f0331 Mon Sep 17 00:00:00 2001
From e3bc0f8b38f7f68fe132db47a0fc239af4843181 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 310b2716dfa..d2919a2db09 100644
index e95c33132e6..7cf8953f47e 100644
--- a/server/process.c
+++ b/server/process.c
@@ -49,6 +49,7 @@
@@ -60,7 +60,7 @@ index 310b2716dfa..d2919a2db09 100644
/* process object */
@@ -72,6 +73,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
@@ -81,6 +82,7 @@ static struct security_descriptor *process_get_sd( struct object *obj );
static void process_poll_event( struct fd *fd, int event );
static struct list *process_get_kernel_obj_list( struct object *obj );
static void process_destroy( struct object *obj );
@@ -68,7 +68,7 @@ index 310b2716dfa..d2919a2db09 100644
static void terminate_process( struct process *process, struct thread *skip, int exit_code );
static const struct object_ops process_ops =
@@ -82,7 +84,7 @@ static const struct object_ops process_ops =
@@ -91,7 +93,7 @@ static const struct object_ops process_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
process_signaled, /* signaled */
@@ -77,7 +77,7 @@ index 310b2716dfa..d2919a2db09 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -547,6 +549,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -553,6 +555,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
process->trace_data = 0;
process->rawinput_mouse = NULL;
process->rawinput_kbd = NULL;
@@ -85,7 +85,7 @@ index 310b2716dfa..d2919a2db09 100644
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
@@ -603,6 +606,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -609,6 +612,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
if (!token_assign_label( process->token, security_high_label_sid ))
goto error;
@@ -95,7 +95,7 @@ index 310b2716dfa..d2919a2db09 100644
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
return process;
@@ -649,6 +655,7 @@ static void process_destroy( struct object *obj )
@@ -655,6 +661,7 @@ static void process_destroy( struct object *obj )
if (process->id) free_ptid( process->id );
if (process->token) release_object( process->token );
free( process->dir_cache );
@@ -103,7 +103,7 @@ index 310b2716dfa..d2919a2db09 100644
}
/* dump a process on stdout for debugging purposes */
@@ -666,6 +673,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -672,6 +679,13 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}
@@ -116,7 +116,7 @@ index 310b2716dfa..d2919a2db09 100644
+
static unsigned int process_map_access( struct object *obj, unsigned int access )
{
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
access = default_map_access( obj, access );
diff --git a/server/process.h b/server/process.h
index caab869c8a0..afa90581b97 100644
--- a/server/process.h

View File

@@ -1,4 +1,4 @@
From bc87843880d2a1ef6f092793c09439c729fe7dbb Mon Sep 17 00:00:00 2001
From 0ffe77334eaf10be9a241dae48cf772228abde3b Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 21:01:24 -0500
Subject: [PATCH] server: Create eventfd file descriptors for event objects.
@@ -41,7 +41,7 @@ index 1e12560ddd6..fcbfd0989bb 100644
void esync_wake_up( struct object *obj );
+void esync_clear( int fd );
diff --git a/server/event.c b/server/event.c
index 7c57ce54d13..78d90dac5d6 100644
index 490fd9875bd..0938a73f648 100644
--- a/server/event.c
+++ b/server/event.c
@@ -35,6 +35,7 @@
@@ -52,7 +52,7 @@ index 7c57ce54d13..78d90dac5d6 100644
static const WCHAR event_name[] = {'E','v','e','n','t'};
@@ -49,14 +50,17 @@ struct event
@@ -56,13 +57,16 @@ struct event
struct list kernel_object; /* list of kernel object pointers */
int manual_reset; /* is it a manual reset event? */
int signaled; /* event has been signaled */
@@ -63,14 +63,13 @@ index 7c57ce54d13..78d90dac5d6 100644
static int event_signaled( struct object *obj, struct wait_queue_entry *entry );
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry );
+static int event_get_esync_fd( struct object *obj, enum esync_type *type );
static unsigned int event_map_access( struct object *obj, unsigned int access );
static int event_signal( struct object *obj, unsigned int access);
static struct list *event_get_kernel_obj_list( struct object *obj );
+static void event_destroy( struct object *obj );
static const struct object_ops event_ops =
{
@@ -66,7 +70,7 @@ static const struct object_ops event_ops =
@@ -72,7 +76,7 @@ static const struct object_ops event_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
event_signaled, /* signaled */
@@ -79,7 +78,7 @@ index 7c57ce54d13..78d90dac5d6 100644
event_satisfied, /* satisfied */
event_signal, /* signal */
no_get_fd, /* get_fd */
@@ -80,7 +84,7 @@ static const struct object_ops event_ops =
@@ -86,7 +90,7 @@ static const struct object_ops event_ops =
no_open_file, /* open_file */
event_get_kernel_obj_list, /* get_kernel_obj_list */
no_close_handle, /* close_handle */
@@ -88,7 +87,7 @@ index 7c57ce54d13..78d90dac5d6 100644
};
@@ -140,6 +144,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
@@ -152,6 +156,9 @@ struct event *create_event( struct object *root, const struct unicode_str *name,
list_init( &event->kernel_object );
event->manual_reset = manual_reset;
event->signaled = initial_state;
@@ -98,7 +97,7 @@ index 7c57ce54d13..78d90dac5d6 100644
}
}
return event;
@@ -168,6 +175,9 @@ void set_event( struct event *event )
@@ -180,6 +187,9 @@ void set_event( struct event *event )
void reset_event( struct event *event )
{
event->signaled = 0;
@@ -108,7 +107,7 @@ index 7c57ce54d13..78d90dac5d6 100644
}
static void event_dump( struct object *obj, int verbose )
@@ -185,6 +195,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -197,6 +207,13 @@ static int event_signaled( struct object *obj, struct wait_queue_entry *entry )
return event->signaled;
}
@@ -122,7 +121,7 @@ index 7c57ce54d13..78d90dac5d6 100644
static void event_satisfied( struct object *obj, struct wait_queue_entry *entry )
{
struct event *event = (struct event *)obj;
@@ -222,6 +239,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
@@ -225,6 +242,14 @@ static struct list *event_get_kernel_obj_list( struct object *obj )
return &event->kernel_object;
}

View File

@@ -1,4 +1,4 @@
From 183ec6174f0d6d02b9f94aaf0f0b35874e8b4b09 Mon Sep 17 00:00:00 2001
From 5bfa95c3058d8c869e7555514b05dc877a842e42 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,10 +9,10 @@ Subject: [PATCH] server: Create eventfd file descriptors for thread objects.
2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/server/thread.c b/server/thread.c
index d3021d3d771..26cbeee68fd 100644
index 8432d0aa8ed..d4b88be3897 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -178,6 +178,7 @@ struct type_descr thread_type =
@@ -186,6 +186,7 @@ struct type_descr thread_type =
static void dump_thread( struct object *obj, int verbose );
static int thread_signaled( struct object *obj, struct wait_queue_entry *entry );
@@ -20,7 +20,7 @@ index d3021d3d771..26cbeee68fd 100644
static unsigned int thread_map_access( struct object *obj, unsigned int access );
static void thread_poll_event( struct fd *fd, int event );
static struct list *thread_get_kernel_obj_list( struct object *obj );
@@ -191,7 +192,7 @@ static const struct object_ops thread_ops =
@@ -199,7 +200,7 @@ static const struct object_ops thread_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
thread_signaled, /* signaled */
@@ -29,7 +29,7 @@ index d3021d3d771..26cbeee68fd 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -231,6 +232,7 @@ static inline void init_thread_structure( struct thread *thread )
@@ -239,6 +240,7 @@ static inline void init_thread_structure( struct thread *thread )
thread->context = NULL;
thread->teb = 0;
thread->entry_point = 0;
@@ -37,7 +37,7 @@ index d3021d3d771..26cbeee68fd 100644
thread->system_regs = 0;
thread->queue = NULL;
thread->wait = NULL;
@@ -366,6 +368,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
@@ -374,6 +376,9 @@ struct thread *create_thread( int fd, struct process *process, const struct secu
return NULL;
}
@@ -47,7 +47,7 @@ index d3021d3d771..26cbeee68fd 100644
set_fd_events( thread->request_fd, POLLIN ); /* start listening to events */
add_process_thread( thread->process, thread );
return thread;
@@ -445,6 +450,9 @@ static void destroy_thread( struct object *obj )
@@ -453,6 +458,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 d3021d3d771..26cbeee68fd 100644
}
/* dump a thread on stdout for debugging purposes */
@@ -463,6 +471,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -471,6 +479,13 @@ static int thread_signaled( struct object *obj, struct wait_queue_entry *entry )
return mythread->state == TERMINATED && !mythread->exit_poll;
}
@@ -70,7 +70,7 @@ index d3021d3d771..26cbeee68fd 100644
+
static unsigned int thread_map_access( struct object *obj, unsigned int access )
{
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | THREAD_QUERY_INFORMATION | THREAD_GET_CONTEXT;
access = default_map_access( obj, access );
diff --git a/server/thread.h b/server/thread.h
index 077ab0929ba..99904557d44 100644
--- a/server/thread.h

View File

@@ -1,4 +1,4 @@
From 8a5b98f58a86731874f7d8c0e387aeab22e15fea Mon Sep 17 00:00:00 2001
From 1ad0cfe6a328fd4ffdbce2c61e1cc7c822391734 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 15 Jun 2018 11:01:44 -0500
Subject: [PATCH] server: Create eventfd descriptors for timers.
@@ -8,7 +8,7 @@ Subject: [PATCH] server: Create eventfd descriptors for timers.
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/server/timer.c b/server/timer.c
index be4d5943a41..f1abca3de90 100644
index 23d03aa3582..43b40a13032 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -36,6 +36,7 @@
@@ -19,7 +19,7 @@ index be4d5943a41..f1abca3de90 100644
static const WCHAR timer_name[] = {'T','i','m','e','r'};
@@ -55,10 +56,12 @@ struct timer
@@ -62,10 +63,12 @@ struct timer
struct thread *thread; /* thread that set the APC function */
client_ptr_t callback; /* callback APC function */
client_ptr_t arg; /* callback argument */
@@ -30,9 +30,9 @@ index be4d5943a41..f1abca3de90 100644
static int timer_signaled( struct object *obj, struct wait_queue_entry *entry );
+static int timer_get_esync_fd( struct object *obj, enum esync_type *type );
static void timer_satisfied( struct object *obj, struct wait_queue_entry *entry );
static unsigned int timer_map_access( struct object *obj, unsigned int access );
static void timer_destroy( struct object *obj );
@@ -71,7 +74,7 @@ static const struct object_ops timer_ops =
@@ -77,7 +80,7 @@ static const struct object_ops timer_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
timer_signaled, /* signaled */
@@ -41,7 +41,7 @@ index be4d5943a41..f1abca3de90 100644
timer_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -106,6 +109,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
@@ -112,6 +115,10 @@ static struct timer *create_timer( struct object *root, const struct unicode_str
timer->period = 0;
timer->timeout = NULL;
timer->thread = NULL;
@@ -52,7 +52,7 @@ index be4d5943a41..f1abca3de90 100644
}
}
return timer;
@@ -179,6 +186,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
@@ -185,6 +192,9 @@ static int set_timer( struct timer *timer, timeout_t expire, unsigned int period
{
period = 0; /* period doesn't make any sense for a manual timer */
timer->signaled = 0;
@@ -62,7 +62,7 @@ index be4d5943a41..f1abca3de90 100644
}
timer->when = (expire <= 0) ? expire - monotonic_time : max( expire, current_time );
timer->period = period;
@@ -206,6 +216,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -212,6 +222,13 @@ static int timer_signaled( struct object *obj, struct wait_queue_entry *entry )
return timer->signaled;
}

View File

@@ -1,4 +1,4 @@
From 620371ae80be978b427c6d13e8f7b059bd4bb900 Mon Sep 17 00:00:00 2001
From d70b0135dbcaa414f1252b4d0a0d0389cb751e29 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 7 Jul 2018 12:57:47 +0200
Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and
@@ -11,7 +11,7 @@ Subject: [PATCH] server: Create eventfd descriptors for pseudo-fd objects and
3 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/server/fd.c b/server/fd.c
index d3b1e515b52..a7d81ec055b 100644
index aa629ff1824..be05795f822 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -102,6 +102,7 @@
@@ -64,7 +64,7 @@ index d3b1e515b52..a7d81ec055b 100644
return fd;
}
@@ -2149,6 +2159,9 @@ void set_fd_signaled( struct fd *fd, int signaled )
@@ -2147,6 +2157,9 @@ void set_fd_signaled( struct fd *fd, int signaled )
if (fd->comp_flags & FILE_SKIP_SET_EVENT_ON_HANDLE) return;
fd->signaled = signaled;
if (signaled) wake_up( fd->user, 0 );
@@ -74,7 +74,7 @@ index d3b1e515b52..a7d81ec055b 100644
}
/* handler for close_handle that refuses to close fd-associated handles in other processes */
@@ -2180,6 +2193,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry )
@@ -2178,6 +2191,15 @@ int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry )
return ret;
}
@@ -87,11 +87,11 @@ index d3b1e515b52..a7d81ec055b 100644
+ return ret;
+}
+
/* default map_access() routine for objects that behave like an fd */
unsigned int default_fd_map_access( struct object *obj, unsigned int access )
int default_fd_get_poll_events( struct fd *fd )
{
int events = 0;
diff --git a/server/file.h b/server/file.h
index 477720f8b18..de260e29ddb 100644
index 686bae084c5..dab6d1506c3 100644
--- a/server/file.h
+++ b/server/file.h
@@ -102,6 +102,7 @@ extern void set_fd_signaled( struct fd *fd, int signaled );
@@ -99,14 +99,14 @@ index 477720f8b18..de260e29ddb 100644
extern int default_fd_signaled( struct object *obj, struct wait_queue_entry *entry );
+extern int default_fd_get_esync_fd( struct object *obj, enum esync_type *type );
extern unsigned int default_fd_map_access( struct object *obj, unsigned int access );
extern int default_fd_get_poll_events( struct fd *fd );
extern void default_poll_event( struct fd *fd, int event );
extern void fd_queue_async( struct fd *fd, struct async *async, int type );
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 9ab99d915b9..b438682d214 100644
index 14596d46f6c..9b8fa97c67e 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -163,7 +163,7 @@ static const struct object_ops pipe_server_ops =
@@ -168,7 +168,7 @@ static const struct object_ops pipe_server_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
default_fd_signaled, /* signaled */
@@ -115,7 +115,7 @@ index 9ab99d915b9..b438682d214 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
pipe_end_get_fd, /* get_fd */
@@ -207,7 +207,7 @@ static const struct object_ops pipe_client_ops =
@@ -212,7 +212,7 @@ static const struct object_ops pipe_client_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
default_fd_signaled, /* signaled */
@@ -125,5 +125,5 @@ index 9ab99d915b9..b438682d214 100644
no_signal, /* signal */
pipe_end_get_fd, /* get_fd */
--
2.28.0
2.20.1