Rob Shearman : rpcrt4: Use an alertable wait in rpcrt4_protseq_np_wait_for_new_connection to fix a small memory leak flagged by Valgrind .

Alexandre Julliard julliard at winehq.org
Fri Dec 7 11:02:17 CST 2007


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Thu Dec  6 15:08:11 2007 +0000

rpcrt4: Use an alertable wait in rpcrt4_protseq_np_wait_for_new_connection to fix a small memory leak flagged by Valgrind.

This is called only by the RPCRT4_server_thread so we don't have to 
worry about application user APCs being run at improper times.

---

 dlls/rpcrt4/rpc_transport.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/dlls/rpcrt4/rpc_transport.c b/dlls/rpcrt4/rpc_transport.c
index 0c893e8..ea49b77 100644
--- a/dlls/rpcrt4/rpc_transport.c
+++ b/dlls/rpcrt4/rpc_transport.c
@@ -604,8 +604,16 @@ static int rpcrt4_protseq_np_wait_for_new_connection(RpcServerProtseq *protseq,
     
     if (!objs)
         return -1;
-    
-    res = WaitForMultipleObjects(count, objs, FALSE, INFINITE);
+
+    do
+    {
+        /* an alertable wait isn't strictly necessary, but due to our
+         * overlapped I/O implementation in Wine we need to free some memory
+         * by the file user APC being called, even if no completion routine was
+         * specified at the time of starting the async operation */
+        res = WaitForMultipleObjectsEx(count, objs, FALSE, INFINITE, TRUE);
+    } while (res == WAIT_IO_COMPLETION);
+
     if (res == WAIT_OBJECT_0)
         return 0;
     else if (res == WAIT_FAILED)




More information about the wine-cvs mailing list