Rebase against 4e2c0444121d341bac9bc841ab6662fceeb42c1a.

This commit is contained in:
Sebastian Lackner 2017-07-08 23:09:53 +02:00
parent 00969f9cd8
commit 68d0ea3a19
5 changed files with 102 additions and 110 deletions

View File

@ -1,4 +1,4 @@
From 616d2000a5dd5f9e68fe873a368e72dda49d6953 Mon Sep 17 00:00:00 2001
From 9eb1c0e197164120ed601bd64e9339c0f5ea8acd Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 15 Oct 2016 19:50:46 +0200
Subject: ntdll: Implement FileIoCompletionNotificationInformation info class.
@ -43,10 +43,10 @@ index 3e93b0dfd78..f4e63bcaae6 100644
}
diff --git a/dlls/ntdll/file.c b/dlls/ntdll/file.c
index fd7f3dd955a..00131f11cf7 100644
index a82f081ee23..3c5d4e96876 100644
--- a/dlls/ntdll/file.c
+++ b/dlls/ntdll/file.c
@@ -2802,6 +2802,23 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
@@ -2857,6 +2857,23 @@ NTSTATUS WINAPI NtSetInformationFile(HANDLE handle, PIO_STATUS_BLOCK io,
io->u.Status = STATUS_INVALID_PARAMETER_3;
break;
@ -71,10 +71,10 @@ index fd7f3dd955a..00131f11cf7 100644
io->u.Status = STATUS_INVALID_INFO_CLASS;
break;
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 5053eb123d1..bf45cbfa522 100644
index c0f4efc6c3c..08ac313c1a3 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -3277,12 +3277,11 @@ static void test_file_completion_information(void)
@@ -3082,12 +3082,11 @@ static void test_file_completion_information(void)
if (!(h = create_temp_file(0))) return;
status = pNtSetInformationFile(h, &io, &info, sizeof(info) - 1, FileIoCompletionNotificationInformation);
@ -89,34 +89,34 @@ index 5053eb123d1..bf45cbfa522 100644
return;
}
diff --git a/server/fd.c b/server/fd.c
index 732a5b798f3..8ff5f9801ad 100644
index 9322e2c1c15..4cb46058b64 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -194,6 +194,7 @@ struct fd
struct async_queue *wait_q; /* other async waiters of this fd */
struct async_queue wait_q; /* other async waiters of this fd */
struct completion *completion; /* completion object attached to this fd */
apc_param_t comp_key; /* completion key to set in completion events */
+ unsigned int comp_flags; /* completion flags */
};
static void fd_dump( struct object *obj, int verbose );
@@ -1607,6 +1608,7 @@ static struct fd *alloc_fd_object(void)
fd->write_q = NULL;
fd->wait_q = NULL;
@@ -1604,6 +1605,7 @@ static struct fd *alloc_fd_object(void)
fd->fs_locks = 1;
fd->poll_index = -1;
fd->completion = NULL;
+ fd->comp_flags = 0;
list_init( &fd->inode_entry );
list_init( &fd->locks );
@@ -1642,6 +1644,7 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use
fd->write_q = NULL;
fd->wait_q = NULL;
init_async_queue( &fd->read_q );
init_async_queue( &fd->write_q );
init_async_queue( &fd->wait_q );
@@ -1639,6 +1641,7 @@ struct fd *alloc_pseudo_fd( const struct fd_ops *fd_user_ops, struct object *use
fd->fs_locks = 0;
fd->poll_index = -1;
fd->completion = NULL;
+ fd->comp_flags = 0;
fd->no_fd_status = STATUS_BAD_DEVICE_TYPE;
list_init( &fd->inode_entry );
list_init( &fd->locks );
@@ -2369,6 +2372,7 @@ void fd_copy_completion( struct fd *src, struct fd *dst )
init_async_queue( &fd->read_q );
init_async_queue( &fd->write_q );
@@ -2360,6 +2363,7 @@ void fd_copy_completion( struct fd *src, struct fd *dst )
{
assert( !dst->completion );
dst->completion = fd_get_completion( src, &dst->comp_key );
@ -124,7 +124,7 @@ index 732a5b798f3..8ff5f9801ad 100644
}
/* flush a file buffers */
@@ -2539,12 +2543,29 @@ DECL_HANDLER(add_fd_completion)
@@ -2543,12 +2547,29 @@ DECL_HANDLER(add_fd_completion)
struct fd *fd = get_handle_fd_obj( current->process, req->handle, 0 );
if (fd)
{
@ -156,10 +156,10 @@ index 732a5b798f3..8ff5f9801ad 100644
DECL_HANDLER(set_fd_disp_info)
{
diff --git a/server/protocol.def b/server/protocol.def
index 60865a6ffc2..73fef6fade6 100644
index 1f88c6a5c86..3646b9a4349 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -3657,6 +3657,14 @@ struct handle_info
@@ -3651,6 +3651,14 @@ struct handle_info
@END
@ -175,5 +175,5 @@ index 60865a6ffc2..73fef6fade6 100644
@REQ(set_fd_disp_info)
obj_handle_t handle; /* handle to a file or directory */
--
2.11.0
2.13.1

View File

@ -1,4 +1,4 @@
From 9c2428d179473d7bd8e383132e408edd330f8e80 Mon Sep 17 00:00:00 2001
From fcc8dc4d71db746ccc4b974eae02edd222d23313 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sun, 9 Apr 2017 03:13:25 +0200
Subject: server: Skip async completion when possible.
@ -25,26 +25,26 @@ index bda9a144ade..aa240edea21 100644
CloseHandle(ov.hEvent);
diff --git a/server/async.c b/server/async.c
index 3a83a6302bf..770ed493819 100644
index 020580728de..08daa9a2304 100644
--- a/server/async.c
+++ b/server/async.c
@@ -51,6 +51,7 @@ struct async
struct iosb *iosb; /* I/O status block */
obj_handle_t wait_handle; /* pre-allocated wait handle */
@@ -53,6 +53,7 @@ struct async
int direct_result; /* a flag if we're passing result directly from request instead of APC */
struct completion *completion; /* completion associated with fd */
apc_param_t comp_key; /* completion key associated with fd */
+ unsigned int comp_flags; /* completion flags */
};
static void async_dump( struct object *obj, int verbose );
@@ -294,6 +295,7 @@ struct async *create_async( struct fd *fd, struct thread *thread, const async_da
async->signaled = 0;
@@ -237,6 +238,7 @@ struct async *create_async( struct fd *fd, struct thread *thread, const async_da
async->wait_handle = 0;
async->direct_result = 0;
async->completion = NULL;
+ async->comp_flags = 0;
if (iosb) async->iosb = (struct iosb *)grab_object( iosb );
else async->iosb = NULL;
@@ -306,7 +308,7 @@ struct async *create_async( struct fd *fd, struct thread *thread, const async_da
@@ -249,7 +251,7 @@ struct async *create_async( struct fd *fd, struct thread *thread, const async_da
/* create an async associated with iosb for async-based requests
* returned async must be passed to async_handoff */
@ -53,7 +53,7 @@ index 3a83a6302bf..770ed493819 100644
{
struct async *async;
struct iosb *iosb;
@@ -324,6 +326,7 @@ struct async *create_request_async( struct fd *fd, const async_data_t *data )
@@ -267,6 +269,7 @@ struct async *create_request_async( struct fd *fd, const async_data_t *data )
return NULL;
}
async->direct_result = 1;
@ -61,7 +61,7 @@ index 3a83a6302bf..770ed493819 100644
}
return async;
}
@@ -438,8 +441,11 @@ void async_set_result( struct object *obj, unsigned int status, apc_param_t tota
@@ -368,8 +371,11 @@ void async_set_result( struct object *obj, unsigned int status, apc_param_t tota
data.user.args[2] = 0;
thread_queue_apc( async->thread, NULL, &data );
}
@ -75,10 +75,10 @@ index 3a83a6302bf..770ed493819 100644
if (async->event) set_event( async->event );
else if (async->fd) set_fd_signaled( async->fd, 1 );
diff --git a/server/fd.c b/server/fd.c
index 6747aaabdb4..2a8ecb12b8e 100644
index 18b1e04d448..d8f066c7219 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -2377,7 +2377,7 @@ DECL_HANDLER(flush)
@@ -2374,7 +2374,7 @@ DECL_HANDLER(flush)
if (!fd) return;
@ -87,7 +87,7 @@ index 6747aaabdb4..2a8ecb12b8e 100644
{
reply->event = async_handoff( async, fd->fd_ops->flush( fd, async ), NULL );
release_object( async );
@@ -2452,7 +2452,7 @@ DECL_HANDLER(read)
@@ -2449,7 +2449,7 @@ DECL_HANDLER(read)
if (!fd) return;
@ -96,7 +96,7 @@ index 6747aaabdb4..2a8ecb12b8e 100644
{
reply->wait = async_handoff( async, fd->fd_ops->read( fd, async, req->pos ), NULL );
reply->options = fd->options;
@@ -2469,7 +2469,7 @@ DECL_HANDLER(write)
@@ -2466,7 +2466,7 @@ DECL_HANDLER(write)
if (!fd) return;
@ -105,7 +105,7 @@ index 6747aaabdb4..2a8ecb12b8e 100644
{
reply->wait = async_handoff( async, fd->fd_ops->write( fd, async, req->pos ), &reply->size );
reply->options = fd->options;
@@ -2487,7 +2487,7 @@ DECL_HANDLER(ioctl)
@@ -2484,7 +2484,7 @@ DECL_HANDLER(ioctl)
if (!fd) return;
@ -115,11 +115,11 @@ index 6747aaabdb4..2a8ecb12b8e 100644
reply->wait = async_handoff( async, fd->fd_ops->ioctl( fd, req->code, async ), NULL );
reply->options = fd->options;
diff --git a/server/file.h b/server/file.h
index 386f76c4be2..1c9c66fdad1 100644
index fa41654e6b6..33b42554534 100644
--- a/server/file.h
+++ b/server/file.h
@@ -176,7 +176,7 @@ extern struct object *create_serial( struct fd *fd );
extern struct async_queue *create_async_queue( struct fd *fd );
@@ -180,7 +180,7 @@ extern struct object *create_serial( struct fd *fd );
/* async I/O functions */
extern void free_async_queue( struct async_queue *queue );
extern struct async *create_async( struct fd *fd, struct thread *thread, const async_data_t *data, struct iosb *iosb );
-extern struct async *create_request_async( struct fd *fd, const async_data_t *data );

View File

@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "287be7c5ee5ed4d070d93209c6cd355be6ed46da"
echo "4e2c0444121d341bac9bc841ab6662fceeb42c1a"
}
# Show version information

View File

@ -1,11 +1,11 @@
From 3cd055a78a35711b9ec0ee3df327e4786a5ca986 Mon Sep 17 00:00:00 2001
From 0d08cd53ad5041a9ed09bfcc558719306c022f4c Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 4 Dec 2015 10:36:47 +0100
Subject: server: Introduce a new alloc_handle object callback. (v2)
Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
---
server/async.c | 3 +++
server/async.c | 2 ++
server/atom.c | 1 +
server/change.c | 1 +
server/clipboard.c | 1 +
@ -39,13 +39,13 @@ Signed-off-by: Sebastian Lackner <sebastian@fds-team.de>
server/timer.c | 1 +
server/token.c | 1 +
server/winstation.c | 2 ++
34 files changed, 74 insertions(+), 3 deletions(-)
34 files changed, 73 insertions(+), 3 deletions(-)
diff --git a/server/async.c b/server/async.c
index ec46103..38ea0fb 100644
index 020580728de..cfda29ec8c0 100644
--- a/server/async.c
+++ b/server/async.c
@@ -72,6 +72,7 @@ static const struct object_ops async_ops =
@@ -78,6 +78,7 @@ static const struct object_ops async_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -53,15 +53,7 @@ index ec46103..38ea0fb 100644
no_close_handle, /* close_handle */
async_destroy /* destroy */
};
@@ -107,6 +108,7 @@ static const struct object_ops async_queue_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
+ no_alloc_handle, /* alloc_handle */
no_close_handle, /* close_handle */
async_queue_destroy /* destroy */
};
@@ -417,6 +419,7 @@ static const struct object_ops iosb_ops =
@@ -452,6 +453,7 @@ static const struct object_ops iosb_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -70,7 +62,7 @@ index ec46103..38ea0fb 100644
iosb_destroy /* destroy */
};
diff --git a/server/atom.c b/server/atom.c
index 3ff7540..7bebf13 100644
index 3ff75407d9f..7bebf136a21 100644
--- a/server/atom.c
+++ b/server/atom.c
@@ -90,6 +90,7 @@ static const struct object_ops atom_table_ops =
@ -82,7 +74,7 @@ index 3ff7540..7bebf13 100644
atom_table_destroy /* destroy */
};
diff --git a/server/change.c b/server/change.c
index d7ebf3b..ac48cce 100644
index 4dd7933f3ee..9340d4ad85c 100644
--- a/server/change.c
+++ b/server/change.c
@@ -172,6 +172,7 @@ static const struct object_ops dir_ops =
@ -94,10 +86,10 @@ index d7ebf3b..ac48cce 100644
dir_destroy /* destroy */
};
diff --git a/server/clipboard.c b/server/clipboard.c
index a93319a..4dd4b50 100644
index 160eb46959d..70b7e325380 100644
--- a/server/clipboard.c
+++ b/server/clipboard.c
@@ -86,6 +86,7 @@ static const struct object_ops clipboard_ops =
@@ -87,6 +87,7 @@ static const struct object_ops clipboard_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -106,7 +98,7 @@ index a93319a..4dd4b50 100644
clipboard_destroy /* destroy */
};
diff --git a/server/completion.c b/server/completion.c
index 8b8983a..72dbc5b 100644
index 8b8983a157f..72dbc5b821f 100644
--- a/server/completion.c
+++ b/server/completion.c
@@ -75,6 +75,7 @@ static const struct object_ops completion_ops =
@ -118,7 +110,7 @@ index 8b8983a..72dbc5b 100644
completion_destroy /* destroy */
};
diff --git a/server/console.c b/server/console.c
index 5b69e76..832f0d4 100644
index 5b69e769a61..832f0d4af34 100644
--- a/server/console.c
+++ b/server/console.c
@@ -87,6 +87,7 @@ static const struct object_ops console_input_ops =
@ -146,7 +138,7 @@ index 5b69e76..832f0d4 100644
screen_buffer_destroy /* destroy */
};
diff --git a/server/debugger.c b/server/debugger.c
index 2eb794a..a2c07ba 100644
index 2eb794aaf25..a2c07ba95c3 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -84,6 +84,7 @@ static const struct object_ops debug_event_ops =
@ -166,10 +158,10 @@ index 2eb794a..a2c07ba 100644
debug_ctx_destroy /* destroy */
};
diff --git a/server/device.c b/server/device.c
index 975507e..2abe695 100644
index 192395dcc7f..a7844749040 100644
--- a/server/device.c
+++ b/server/device.c
@@ -76,6 +76,7 @@ static const struct object_ops irp_call_ops =
@@ -75,6 +75,7 @@ static const struct object_ops irp_call_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -177,7 +169,7 @@ index 975507e..2abe695 100644
no_close_handle, /* close_handle */
irp_call_destroy /* destroy */
};
@@ -112,6 +113,7 @@ static const struct object_ops device_manager_ops =
@@ -111,6 +112,7 @@ static const struct object_ops device_manager_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -185,7 +177,7 @@ index 975507e..2abe695 100644
no_close_handle, /* close_handle */
device_manager_destroy /* destroy */
};
@@ -153,6 +155,7 @@ static const struct object_ops device_ops =
@@ -152,6 +154,7 @@ static const struct object_ops device_ops =
directory_link_name, /* link_name */
default_unlink_name, /* unlink_name */
device_open_file, /* open_file */
@ -193,7 +185,7 @@ index 975507e..2abe695 100644
no_close_handle, /* close_handle */
device_destroy /* destroy */
};
@@ -201,6 +204,7 @@ static const struct object_ops device_file_ops =
@@ -197,6 +200,7 @@ static const struct object_ops device_file_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -202,7 +194,7 @@ index 975507e..2abe695 100644
device_file_destroy /* destroy */
};
diff --git a/server/directory.c b/server/directory.c
index 7ffaedc..d903ff2 100644
index 7ffaedc4623..d903ff283c0 100644
--- a/server/directory.c
+++ b/server/directory.c
@@ -67,6 +67,7 @@ static const struct object_ops object_type_ops =
@ -222,7 +214,7 @@ index 7ffaedc..d903ff2 100644
directory_destroy /* destroy */
};
diff --git a/server/event.c b/server/event.c
index cfc0f6a..608fafb 100644
index cfc0f6afc0d..608fafb94d7 100644
--- a/server/event.c
+++ b/server/event.c
@@ -68,6 +68,7 @@ static const struct object_ops event_ops =
@ -242,7 +234,7 @@ index cfc0f6a..608fafb 100644
no_destroy /* destroy */
};
diff --git a/server/fd.c b/server/fd.c
index 3ccd0f8..8a961a5 100644
index 9322e2c1c15..721432a4ff3 100644
--- a/server/fd.c
+++ b/server/fd.c
@@ -217,6 +217,7 @@ static const struct object_ops fd_ops =
@ -278,7 +270,7 @@ index 3ccd0f8..8a961a5 100644
no_destroy /* destroy */
};
diff --git a/server/file.c b/server/file.c
index 2f5371d..359cf7a 100644
index 3809012dc8f..e2826c73725 100644
--- a/server/file.c
+++ b/server/file.c
@@ -95,6 +95,7 @@ static const struct object_ops file_ops =
@ -290,7 +282,7 @@ index 2f5371d..359cf7a 100644
file_destroy /* destroy */
};
diff --git a/server/handle.c b/server/handle.c
index 37fba69..a8fd228 100644
index 35ab8607c85..782baefaaa0 100644
--- a/server/handle.c
+++ b/server/handle.c
@@ -133,6 +133,7 @@ static const struct object_ops handle_table_ops =
@ -321,7 +313,7 @@ index 37fba69..a8fd228 100644
return index_to_handle(i);
}
@@ -372,7 +377,11 @@ struct handle_table *copy_handle_table( struct process *process, struct process
@@ -373,7 +378,11 @@ struct handle_table *copy_handle_table( struct process *process, struct process
for (i = 0; i <= table->last; i++, ptr++)
{
if (!ptr->ptr) continue;
@ -335,7 +327,7 @@ index 37fba69..a8fd228 100644
}
}
diff --git a/server/hook.c b/server/hook.c
index 3a0e4b4..dc653b8 100644
index 3a0e4b4d1d3..dc653b8c42e 100644
--- a/server/hook.c
+++ b/server/hook.c
@@ -91,6 +91,7 @@ static const struct object_ops hook_table_ops =
@ -347,7 +339,7 @@ index 3a0e4b4..dc653b8 100644
hook_table_destroy /* destroy */
};
diff --git a/server/mailslot.c b/server/mailslot.c
index 783b28b..077547f 100644
index d7affa514bf..671c969b9a5 100644
--- a/server/mailslot.c
+++ b/server/mailslot.c
@@ -89,6 +89,7 @@ static const struct object_ops mailslot_ops =
@ -375,7 +367,7 @@ index 783b28b..077547f 100644
mailslot_device_destroy /* destroy */
};
diff --git a/server/mapping.c b/server/mapping.c
index f03ea7a..a465bf5 100644
index f03ea7a6f63..a465bf5f2dd 100644
--- a/server/mapping.c
+++ b/server/mapping.c
@@ -94,6 +94,7 @@ static const struct object_ops mapping_ops =
@ -387,7 +379,7 @@ index f03ea7a..a465bf5 100644
mapping_destroy /* destroy */
};
diff --git a/server/mutex.c b/server/mutex.c
index d1887e4..a2a0a24 100644
index d1887e4bc45..a2a0a24bdc3 100644
--- a/server/mutex.c
+++ b/server/mutex.c
@@ -71,6 +71,7 @@ static const struct object_ops mutex_ops =
@ -399,10 +391,10 @@ index d1887e4..a2a0a24 100644
mutex_destroy /* destroy */
};
diff --git a/server/named_pipe.c b/server/named_pipe.c
index 3245688..8ed4b97 100644
index 80363cb971a..abacf0a4b76 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -134,6 +134,7 @@ static const struct object_ops named_pipe_ops =
@@ -148,6 +148,7 @@ static const struct object_ops named_pipe_ops =
named_pipe_link_name, /* link_name */
default_unlink_name, /* unlink_name */
named_pipe_open_file, /* open_file */
@ -410,7 +402,7 @@ index 3245688..8ed4b97 100644
no_close_handle, /* close_handle */
named_pipe_destroy /* destroy */
};
@@ -165,6 +166,7 @@ static const struct object_ops pipe_server_ops =
@@ -184,6 +185,7 @@ static const struct object_ops pipe_server_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -418,7 +410,7 @@ index 3245688..8ed4b97 100644
fd_close_handle, /* close_handle */
pipe_server_destroy /* destroy */
};
@@ -208,6 +210,7 @@ static const struct object_ops pipe_client_ops =
@@ -227,6 +229,7 @@ static const struct object_ops pipe_client_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -426,7 +418,7 @@ index 3245688..8ed4b97 100644
fd_close_handle, /* close_handle */
pipe_client_destroy /* destroy */
};
@@ -255,6 +258,7 @@ static const struct object_ops named_pipe_device_ops =
@@ -273,6 +276,7 @@ static const struct object_ops named_pipe_device_ops =
directory_link_name, /* link_name */
default_unlink_name, /* unlink_name */
named_pipe_device_open_file, /* open_file */
@ -435,10 +427,10 @@ index 3245688..8ed4b97 100644
named_pipe_device_destroy /* destroy */
};
diff --git a/server/object.c b/server/object.c
index ad22ec1..f5d7d9f 100644
index 4455718aac3..14cd38e6f7e 100644
--- a/server/object.c
+++ b/server/object.c
@@ -652,6 +652,10 @@ struct object *no_open_file( struct object *obj, unsigned int access, unsigned i
@@ -692,6 +692,10 @@ struct object *no_open_file( struct object *obj, unsigned int access, unsigned i
return NULL;
}
@ -450,7 +442,7 @@ index ad22ec1..f5d7d9f 100644
{
return 1; /* ok to close */
diff --git a/server/object.h b/server/object.h
index b5c50e1..72ad852 100644
index b5c50e1cee8..72ad8528c5a 100644
--- a/server/object.h
+++ b/server/object.h
@@ -89,8 +89,10 @@ struct object_ops
@ -474,7 +466,7 @@ index b5c50e1..72ad852 100644
extern void no_destroy( struct object *obj );
#ifdef DEBUG_OBJECTS
diff --git a/server/process.c b/server/process.c
index e9e2f21..836c1cb4 100644
index 2327a2664b3..22406d109f8 100644
--- a/server/process.c
+++ b/server/process.c
@@ -84,6 +84,7 @@ static const struct object_ops process_ops =
@ -502,7 +494,7 @@ index e9e2f21..836c1cb4 100644
job_destroy /* destroy */
};
diff --git a/server/queue.c b/server/queue.c
index c479b38..382f14f 100644
index c479b388bd6..382f14f12d1 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -181,6 +181,7 @@ static const struct object_ops msg_queue_ops =
@ -522,7 +514,7 @@ index c479b38..382f14f 100644
thread_input_destroy /* destroy */
};
diff --git a/server/registry.c b/server/registry.c
index 0731b22..cfc1534 100644
index 734a1115b21..6294aa36f03 100644
--- a/server/registry.c
+++ b/server/registry.c
@@ -170,6 +170,7 @@ static const struct object_ops key_ops =
@ -534,7 +526,7 @@ index 0731b22..cfc1534 100644
key_destroy /* destroy */
};
diff --git a/server/request.c b/server/request.c
index 781889c..d434990 100644
index 6120bc550ff..83e608917f8 100644
--- a/server/request.c
+++ b/server/request.c
@@ -107,6 +107,7 @@ static const struct object_ops master_socket_ops =
@ -546,7 +538,7 @@ index 781889c..d434990 100644
master_socket_destroy /* destroy */
};
diff --git a/server/semaphore.c b/server/semaphore.c
index 08ff153..15e7392 100644
index 08ff1536cee..15e73925131 100644
--- a/server/semaphore.c
+++ b/server/semaphore.c
@@ -68,6 +68,7 @@ static const struct object_ops semaphore_ops =
@ -558,10 +550,10 @@ index 08ff153..15e7392 100644
no_destroy /* destroy */
};
diff --git a/server/serial.c b/server/serial.c
index 6f9cc24..ca4ac1f 100644
index 85dd104bc68..9842f9ef42c 100644
--- a/server/serial.c
+++ b/server/serial.c
@@ -106,6 +106,7 @@ static const struct object_ops serial_ops =
@@ -102,6 +102,7 @@ static const struct object_ops serial_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -570,7 +562,7 @@ index 6f9cc24..ca4ac1f 100644
serial_destroy /* destroy */
};
diff --git a/server/signal.c b/server/signal.c
index 74416fa..4b2b8c4 100644
index 74416fab7be..4b2b8c4a15e 100644
--- a/server/signal.c
+++ b/server/signal.c
@@ -77,6 +77,7 @@ static const struct object_ops handler_ops =
@ -582,7 +574,7 @@ index 74416fa..4b2b8c4 100644
handler_destroy /* destroy */
};
diff --git a/server/snapshot.c b/server/snapshot.c
index e35588a..6e788ab 100644
index e35588a136c..6e788abde1c 100644
--- a/server/snapshot.c
+++ b/server/snapshot.c
@@ -71,6 +71,7 @@ static const struct object_ops snapshot_ops =
@ -594,7 +586,7 @@ index e35588a..6e788ab 100644
snapshot_destroy /* destroy */
};
diff --git a/server/sock.c b/server/sock.c
index f70a85d..153f901 100644
index cc9bbccad7e..e903770e4bb 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -155,6 +155,7 @@ static const struct object_ops sock_ops =
@ -605,7 +597,7 @@ index f70a85d..153f901 100644
fd_close_handle, /* close_handle */
sock_destroy /* destroy */
};
@@ -987,6 +988,7 @@ static const struct object_ops ifchange_ops =
@@ -978,6 +979,7 @@ static const struct object_ops ifchange_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -614,7 +606,7 @@ index f70a85d..153f901 100644
ifchange_destroy /* destroy */
};
diff --git a/server/symlink.c b/server/symlink.c
index 9199bc5..ecc0e43 100644
index 9199bc559d7..ecc0e4300c4 100644
--- a/server/symlink.c
+++ b/server/symlink.c
@@ -70,6 +70,7 @@ static const struct object_ops symlink_ops =
@ -626,7 +618,7 @@ index 9199bc5..ecc0e43 100644
symlink_destroy /* destroy */
};
diff --git a/server/thread.c b/server/thread.c
index e18c208..b025f76 100644
index 70f5f28739e..5b0b6377e85 100644
--- a/server/thread.c
+++ b/server/thread.c
@@ -120,6 +120,7 @@ static const struct object_ops thread_apc_ops =
@ -646,7 +638,7 @@ index e18c208..b025f76 100644
destroy_thread /* destroy */
};
diff --git a/server/timer.c b/server/timer.c
index c8b4fa8..23c613b 100644
index c8b4fa8194c..23c613b3cbd 100644
--- a/server/timer.c
+++ b/server/timer.c
@@ -75,6 +75,7 @@ static const struct object_ops timer_ops =
@ -658,10 +650,10 @@ index c8b4fa8..23c613b 100644
timer_destroy /* destroy */
};
diff --git a/server/token.c b/server/token.c
index ca12813..e13d03a 100644
index 532d7b74059..63e9833fc88 100644
--- a/server/token.c
+++ b/server/token.c
@@ -161,6 +161,7 @@ static const struct object_ops token_ops =
@@ -163,6 +163,7 @@ static const struct object_ops token_ops =
no_link_name, /* link_name */
NULL, /* unlink_name */
no_open_file, /* open_file */
@ -670,7 +662,7 @@ index ca12813..e13d03a 100644
token_destroy /* destroy */
};
diff --git a/server/winstation.c b/server/winstation.c
index a0be058..5f96be8 100644
index a0be0586523..5f96be8e13f 100644
--- a/server/winstation.c
+++ b/server/winstation.c
@@ -75,6 +75,7 @@ static const struct object_ops winstation_ops =
@ -690,5 +682,5 @@ index a0be058..5f96be8 100644
desktop_destroy /* destroy */
};
--
2.9.0
2.13.1

View File

@ -1,4 +1,4 @@
From 8ad8b81d980a4a8ce1d53145e5708963627367e8 Mon Sep 17 00:00:00 2001
From 5a2f65ab4c02a8aedea1238e80fe00f509872cf1 Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Mon, 17 Aug 2015 01:11:47 +0200
Subject: server: Store a reference to the parent object for pipe servers. (v2)
@ -30,7 +30,7 @@ index 43c5ee46d71..9a1ba670ab7 100644
"name too short %s\n", wine_dbgstr_w(str->Buffer) );
trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
diff --git a/server/named_pipe.c b/server/named_pipe.c
index e154712e7f0..b36a41c679e 100644
index abacf0a4b76..da1a4c78548 100644
--- a/server/named_pipe.c
+++ b/server/named_pipe.c
@@ -163,6 +163,8 @@ static void pipe_end_reselect_async( struct fd *fd, struct async_queue *queue );
@ -74,7 +74,7 @@ index e154712e7f0..b36a41c679e 100644
no_alloc_handle, /* alloc_handle */
fd_close_handle, /* close_handle */
@@ -478,6 +482,17 @@ static void pipe_end_destroy( struct pipe_end *pipe_end )
free_async_queue( pipe_end->write_q );
free_async_queue( &pipe_end->write_q );
}
+static int pipe_server_link_name( struct object *obj, struct object_name *name, struct object *parent )
@ -109,7 +109,7 @@ index e154712e7f0..b36a41c679e 100644
static void pipe_client_destroy( struct object *obj)
{
struct pipe_client *client = (struct pipe_client *)obj;
@@ -1037,9 +1063,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d
@@ -1029,9 +1055,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d
static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned int options,
unsigned int pipe_flags )
{
@ -121,7 +121,7 @@ index e154712e7f0..b36a41c679e 100644
if (!server)
return NULL;
@@ -1061,11 +1088,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
@@ -1053,11 +1080,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
return server;
}
@ -137,7 +137,7 @@ index e154712e7f0..b36a41c679e 100644
if (!client)
return NULL;
@@ -1135,7 +1164,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
@@ -1127,7 +1156,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
return NULL;
}