diff --git a/patches/kernel32-SetFileCompletionNotificationModes/0001-ntdll-Implement-FileIoCompletionNotificationInformat.patch b/patches/kernel32-SetFileCompletionNotificationModes/0001-ntdll-Implement-FileIoCompletionNotificationInformat.patch index eefb0847..bbee3983 100644 --- a/patches/kernel32-SetFileCompletionNotificationModes/0001-ntdll-Implement-FileIoCompletionNotificationInformat.patch +++ b/patches/kernel32-SetFileCompletionNotificationModes/0001-ntdll-Implement-FileIoCompletionNotificationInformat.patch @@ -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 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 diff --git a/patches/kernel32-SetFileCompletionNotificationModes/0006-server-Skip-async-completion-when-possible.patch b/patches/kernel32-SetFileCompletionNotificationModes/0006-server-Skip-async-completion-when-possible.patch index 203e481a..2ef83432 100644 --- a/patches/kernel32-SetFileCompletionNotificationModes/0006-server-Skip-async-completion-when-possible.patch +++ b/patches/kernel32-SetFileCompletionNotificationModes/0006-server-Skip-async-completion-when-possible.patch @@ -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 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 ); diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 405f962f..e8193a60 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -52,7 +52,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "287be7c5ee5ed4d070d93209c6cd355be6ed46da" + echo "4e2c0444121d341bac9bc841ab6662fceeb42c1a" } # Show version information diff --git a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch index 0a29ca26..8e81d0bf 100644 --- a/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch +++ b/patches/server-Desktop_Refcount/0001-server-Introduce-a-new-alloc_handle-object-callback..patch @@ -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 Date: Fri, 4 Dec 2015 10:36:47 +0100 Subject: server: Introduce a new alloc_handle object callback. (v2) Signed-off-by: Sebastian Lackner --- - 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 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 diff --git a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch b/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch index ac68d79c..4efad928 100644 --- a/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch +++ b/patches/server-Pipe_ObjectName/0001-server-Store-a-reference-to-the-parent-object-for-pi.patch @@ -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 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; }