Rebase against 9d7d68747b06a03893df99c4beea36b762508603

This commit is contained in:
Alistair Leslie-Hughes
2019-04-20 18:45:05 +10:00
parent 36e84f2951
commit 6f1e25e1c0
9 changed files with 102 additions and 490 deletions

View File

@@ -1,8 +1,7 @@
From 4473e26d9c3177ee7a42f023fcbe48edc672f9bc Mon Sep 17 00:00:00 2001
From e6e0ef574ce53d5b5e94068ae9dc137c2c7dee92 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Fri, 8 Jun 2018 18:57:12 -0500
Subject: [PATCH 15/83] server: Create eventfd file descriptors for process
objects.
Subject: [PATCH] server: Create eventfd file descriptors for process objects.
---
server/esync.c | 33 +++++++++++++++++++++++++++++++++
@@ -13,7 +12,7 @@ Subject: [PATCH 15/83] server: Create eventfd file descriptors for process
create mode 100644 server/esync.h
diff --git a/server/esync.c b/server/esync.c
index 351da1a7c..da26d27cb 100644
index 351da1a7cb2..da26d27cbc8 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -35,6 +35,21 @@
@@ -65,7 +64,7 @@ index 351da1a7c..da26d27cb 100644
struct esync *esync;
diff --git a/server/esync.h b/server/esync.h
new file mode 100644
index 000000000..f93535b7b
index 00000000000..f93535b7b4c
--- /dev/null
+++ b/server/esync.h
@@ -0,0 +1,22 @@
@@ -92,7 +91,7 @@ index 000000000..f93535b7b
+extern int do_esync(void);
+int esync_create_fd( int initval, int flags );
diff --git a/server/process.c b/server/process.c
index a96972e6b..0bb220dba 100644
index c4cb041f293..ed03210a5f5 100644
--- a/server/process.c
+++ b/server/process.c
@@ -48,6 +48,7 @@
@@ -103,15 +102,15 @@ index a96972e6b..0bb220dba 100644
/* process structure */
@@ -66,6 +67,7 @@ static unsigned int process_map_access( struct object *obj, unsigned int access
static struct security_descriptor *process_get_sd( struct object *obj );
@@ -67,6 +68,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 );
+static int process_get_esync_fd( struct object *obj );
static void terminate_process( struct process *process, struct thread *skip, int exit_code );
static const struct object_ops process_ops =
@@ -76,7 +78,7 @@ static const struct object_ops process_ops =
@@ -77,7 +79,7 @@ static const struct object_ops process_ops =
add_queue, /* add_queue */
remove_queue, /* remove_queue */
process_signaled, /* signaled */
@@ -120,15 +119,15 @@ index a96972e6b..0bb220dba 100644
no_satisfied, /* satisfied */
no_signal, /* signal */
no_get_fd, /* get_fd */
@@ -529,6 +531,7 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -531,6 +533,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;
+ process->esync_fd = -1;
list_init( &process->kernel_object );
list_init( &process->thread_list );
list_init( &process->locks );
list_init( &process->asyncs );
@@ -572,6 +575,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
@@ -575,6 +578,9 @@ struct process *create_process( int fd, struct process *parent, int inherit_all,
}
if (!process->handles || !process->token) goto error;
@@ -138,7 +137,7 @@ index a96972e6b..0bb220dba 100644
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */
return process;
@@ -620,6 +626,9 @@ static void process_destroy( struct object *obj )
@@ -623,6 +629,9 @@ 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 );
@@ -148,7 +147,7 @@ index a96972e6b..0bb220dba 100644
}
/* dump a process on stdout for debugging purposes */
@@ -643,6 +652,12 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -647,6 +656,12 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}
@@ -162,13 +161,13 @@ index a96972e6b..0bb220dba 100644
{
if (access & GENERIC_READ) access |= STANDARD_RIGHTS_READ | PROCESS_QUERY_INFORMATION | PROCESS_VM_READ;
diff --git a/server/process.h b/server/process.h
index ea2809194..f8fd12833 100644
index 41267a27df5..02765f2f122 100644
--- a/server/process.h
+++ b/server/process.h
@@ -96,6 +96,7 @@ struct process
struct list rawinput_devices;/* list of registered rawinput devices */
@@ -97,6 +97,7 @@ struct process
const struct rawinput_device *rawinput_mouse; /* rawinput mouse device, if any */
const struct rawinput_device *rawinput_kbd; /* rawinput keyboard device, if any */
struct list kernel_object; /* list of kernel object pointers */
+ int esync_fd; /* esync file descriptor (signaled on exit) */
};

View File

@@ -1,4 +1,4 @@
From 29517778d9000de8de3217bcd6f1a2bb933123c6 Mon Sep 17 00:00:00 2001
From 91c96ca57892577e20be532ae58b423fea1750b2 Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Sat, 9 Jun 2018 14:44:54 -0500
Subject: [PATCH] server, ntdll: Also wait on the queue fd when waiting for
@@ -23,7 +23,7 @@ fix the 'drives' tab.
8 files changed, 60 insertions(+), 23 deletions(-)
diff --git a/dlls/ntdll/esync.c b/dlls/ntdll/esync.c
index 5d8dbac2d..dcb7801d9 100644
index 5d8dbac2df4..dcb7801d912 100644
--- a/dlls/ntdll/esync.c
+++ b/dlls/ntdll/esync.c
@@ -80,17 +80,9 @@ void __wine_esync_set_queue_fd( int fd )
@@ -140,7 +140,7 @@ index 5d8dbac2d..dcb7801d9 100644
* we were waiting for. So keep waiting. */
NtQuerySystemTime( &now );
diff --git a/server/esync.c b/server/esync.c
index 4f7ff6bda..1f8c0d516 100644
index 4f7ff6bdaed..1f8c0d5167a 100644
--- a/server/esync.c
+++ b/server/esync.c
@@ -150,11 +150,12 @@ int esync_create_fd( int initval, int flags )
@@ -176,7 +176,7 @@ index 4f7ff6bda..1f8c0d516 100644
}
else
diff --git a/server/event.c b/server/event.c
index d2f9e378c..79287e7ed 100644
index d2f9e378cb1..79287e7edc0 100644
--- a/server/event.c
+++ b/server/event.c
@@ -50,7 +50,7 @@ static void event_dump( struct object *obj, int verbose );
@@ -201,7 +201,7 @@ index d2f9e378c..79287e7ed 100644
}
diff --git a/server/object.h b/server/object.h
index ee0f1f776..ca5a191f9 100644
index ee0f1f776e3..ca5a191f975 100644
--- a/server/object.h
+++ b/server/object.h
@@ -69,7 +69,7 @@ struct object_ops
@@ -214,19 +214,19 @@ index ee0f1f776..ca5a191f9 100644
void (*satisfied)(struct object *,struct wait_queue_entry *);
/* signal an object */
diff --git a/server/process.c b/server/process.c
index 1ce2fb05c..6e6dfc41c 100644
index ed03210a5f5..7fdbfb98cae 100644
--- a/server/process.c
+++ b/server/process.c
@@ -67,7 +67,7 @@ static unsigned int process_map_access( struct object *obj, unsigned int access
static struct security_descriptor *process_get_sd( struct object *obj );
@@ -68,7 +68,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 );
-static int process_get_esync_fd( struct object *obj );
+static int process_get_esync_fd( struct object *obj, enum esync_type *type );
static void terminate_process( struct process *process, struct thread *skip, int exit_code );
static const struct object_ops process_ops =
@@ -654,9 +654,10 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
@@ -656,9 +656,10 @@ static int process_signaled( struct object *obj, struct wait_queue_entry *entry
return !process->running_threads;
}
@@ -239,10 +239,10 @@ index 1ce2fb05c..6e6dfc41c 100644
}
diff --git a/server/protocol.def b/server/protocol.def
index 17959c233..8d2df1f97 100644
index 7a383590c55..7644a25b8ec 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -4012,4 +4012,14 @@ struct handle_info
@@ -4011,4 +4011,14 @@ struct handle_info
@REQ(get_esync_fd)
obj_handle_t handle; /* handle to the object */
@REPLY
@@ -258,7 +258,7 @@ index 17959c233..8d2df1f97 100644
+ ESYNC_QUEUE,
+};
diff --git a/server/queue.c b/server/queue.c
index 0ea95291c..91de4a3a8 100644
index 0ea95291c34..91de4a3a85f 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -165,7 +165,7 @@ static void msg_queue_dump( struct object *obj, int verbose );
@@ -283,7 +283,7 @@ index 0ea95291c..91de4a3a8 100644
}
diff --git a/server/thread.c b/server/thread.c
index 35bddeeaa..7c8ff1d5d 100644
index 83781f0d712..ae2112486b2 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -133,7 +133,7 @@ static const struct object_ops thread_apc_ops =
@@ -308,5 +308,5 @@ index 35bddeeaa..7c8ff1d5d 100644
}
--
2.21.0
2.20.1

View File

@@ -2,7 +2,6 @@ Fixes: [36692] Many multi-threaded applications have poor performance due to hea
# Note: the following dependencies are essentially artificial; in particular
# these patches do not make use of the Staging shared memory infrastructure.
Depends: server-Shared_Memory
Depends: ntdll-NtSuspendProcess
Depends: ntdll-SystemRoot_Symlink
Depends: ws2_32-WSACleanup
Depends: ntdll-RtlCreateUserThread