Alexandre Julliard : server: Make the APC callback optional in async calls.

Alexandre Julliard julliard at wine.codeweavers.com
Wed May 6 09:29:04 CDT 2015


Module: wine
Branch: master
Commit: 481517178ff7dd542966d7f11f3d61b3fc8a0776
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=481517178ff7dd542966d7f11f3d61b3fc8a0776

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed May  6 17:10:31 2015 +0900

server: Make the APC callback optional in async calls.

---

 server/async.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/server/async.c b/server/async.c
index a8f3b05..e1650fe 100644
--- a/server/async.c
+++ b/server/async.c
@@ -145,8 +145,6 @@ static void async_queue_destroy( struct object *obj )
 /* notifies client thread of new status of its async request */
 void async_terminate( struct async *async, unsigned int status )
 {
-    apc_call_t data;
-
     assert( status != STATUS_PENDING );
 
     if (async->status != STATUS_PENDING)
@@ -156,14 +154,22 @@ void async_terminate( struct async *async, unsigned int status )
         return;
     }
 
-    memset( &data, 0, sizeof(data) );
-    data.type            = APC_ASYNC_IO;
-    data.async_io.func   = async->data.callback;
-    data.async_io.user   = async->data.arg;
-    data.async_io.sb     = async->data.iosb;
-    data.async_io.status = status;
-    thread_queue_apc( async->thread, &async->obj, &data );
     async->status = status;
+
+    if (async->data.callback)
+    {
+        apc_call_t data;
+
+        memset( &data, 0, sizeof(data) );
+        data.type            = APC_ASYNC_IO;
+        data.async_io.func   = async->data.callback;
+        data.async_io.user   = async->data.arg;
+        data.async_io.sb     = async->data.iosb;
+        data.async_io.status = status;
+        thread_queue_apc( async->thread, &async->obj, &data );
+    }
+    else async_set_result( &async->obj, STATUS_SUCCESS, 0, 0, 0 );
+
     async_reselect( async );
     release_object( async );  /* so that it gets destroyed when the async is done */
 }




More information about the wine-cvs mailing list