Skip to content
This repository has been archived by the owner on Oct 1, 2020. It is now read-only.

Commit

Permalink
Added patch to avoid crash when async_terminate destroys async object…
Browse files Browse the repository at this point in the history
… in free_async_queue.
  • Loading branch information
slackner committed Jul 28, 2017
1 parent c0a6152 commit 77a90f1
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 0 deletions.
16 changes: 16 additions & 0 deletions patches/patchinstall.sh
Expand Up @@ -339,6 +339,7 @@ patch_enable_all ()
enable_server_Stored_ACLs="$1"
enable_server_Timestamp_Compat="$1"
enable_server_device_manager_destroy="$1"
enable_server_free_async_queue="$1"
enable_server_send_hardware_message="$1"
enable_setupapi_DelReg="$1"
enable_setupapi_DiskSpaceList="$1"
Expand Down Expand Up @@ -1282,6 +1283,9 @@ patch_enable ()
server-device_manager_destroy)
enable_server_device_manager_destroy="$2"
;;
server-free_async_queue)
enable_server_free_async_queue="$2"
;;
server-send_hardware_message)
enable_server_send_hardware_message="$2"
;;
Expand Down Expand Up @@ -7563,6 +7567,18 @@ if test "$enable_server_device_manager_destroy" -eq 1; then
) >> "$patchlist"
fi

# Patchset server-free_async_queue
# |
# | Modified files:
# | * server/async.c
# |
if test "$enable_server_free_async_queue" -eq 1; then
patch_apply server-free_async_queue/0001-server-Avoid-crash-when-async_terminate-destroys-asy.patch
(
printf '%s\n' '+ { "Sebastian Lackner", "server: Avoid crash when async_terminate destroys async object in free_async_queue.", 1 },';
) >> "$patchlist"
fi

# Patchset server-send_hardware_message
# |
# | This patchset fixes the following Wine bugs:
Expand Down
@@ -0,0 +1,30 @@
From 6844c121a7cd8a7f90afc0c033cf1c3519fd8d9a Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Fri, 28 Jul 2017 02:41:27 +0200
Subject: server: Avoid crash when async_terminate destroys async object in
free_async_queue.

---
server/async.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/server/async.c b/server/async.c
index 926c121f6f9..9e91f9eadf3 100644
--- a/server/async.c
+++ b/server/async.c
@@ -194,10 +194,12 @@ void free_async_queue( struct async_queue *queue )

LIST_FOR_EACH_ENTRY_SAFE( async, next, &queue->queue, struct async, queue_entry )
{
+ grab_object( &async->obj );
if (!async->completion) async->completion = fd_get_completion( async->fd, &async->comp_key );
async->fd = NULL;
async_terminate( async, STATUS_HANDLES_CLOSED );
async->queue = NULL;
+ release_object( &async->obj );
}
}

--
2.13.1

1 change: 1 addition & 0 deletions patches/server-free_async_queue/definition
@@ -0,0 +1 @@
Fixes: Avoid crash when async_terminate destroys async object in free_async_queue

0 comments on commit 77a90f1

Please sign in to comment.