Francois Gouget : rpcss: Fix a file handle leak in RPCSS_BecomePipeServer() .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 8 15:35:54 CST 2007


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

Author: Francois Gouget <fgouget at free.fr>
Date:   Thu Mar  8 15:30:29 2007 +0100

rpcss: Fix a file handle leak in RPCSS_BecomePipeServer().

Also, RPCSS_NPConnect() returns a file handle so treat it as such by
checking it against INVALID_HANDLE_VALUE and not NULL.

---

 programs/rpcss/np_server.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/programs/rpcss/np_server.c b/programs/rpcss/np_server.c
index 729f156..bcb151e 100644
--- a/programs/rpcss/np_server.c
+++ b/programs/rpcss/np_server.c
@@ -334,7 +334,7 @@ static VOID NPMainWorkThread(LPVOID ignored)
 
 static HANDLE RPCSS_NPConnect(void)
 {
-  HANDLE the_pipe = NULL;
+  HANDLE the_pipe;
   DWORD dwmode, wait_result;
   HANDLE master_mutex = RPCSS_GetMasterMutex();
   
@@ -371,7 +371,6 @@ static HANDLE RPCSS_NPConnect(void)
     if (GetLastError() != ERROR_PIPE_BUSY) {
       WINE_WARN("Unable to open named pipe %s (assuming unavailable).\n", 
         wine_dbgstr_a(NAME_RPCSS_NAMED_PIPE));
-      the_pipe = NULL;
       break;
     }
 
@@ -390,7 +389,7 @@ static HANDLE RPCSS_NPConnect(void)
 
   }
 
-  if (the_pipe) {
+  if (the_pipe != INVALID_HANDLE_VALUE) {
     dwmode = PIPE_READMODE_MESSAGE;
     /* SetNamedPipeHandleState not implemented ATM, but still seems to work somehow. */
     if (! SetNamedPipeHandleState(the_pipe, &dwmode, NULL, NULL))
@@ -468,12 +467,13 @@ BOOL RPCSS_BecomePipeServer(void)
    *     ready to listen on it
    */
   
-  if ((client_handle = RPCSS_NPConnect()) != NULL) {
+  if ((client_handle = RPCSS_NPConnect()) != INVALID_HANDLE_VALUE) {
     msg.message_type = RPCSS_NP_MESSAGE_TYPEID_RANMSG;
     msg.message.ranmsg.timeout = RPCSS_GetMaxLazyTimeout();
     msg.vardata_payload_size = 0;
     if (!RPCSS_SendReceiveNPMsg(client_handle, &msg, &reply))
       WINE_ERR("Something is amiss: RPC_SendReceive failed.\n");
+    CloseHandle(client_handle);
     rslt = FALSE;
   }
   if (rslt) {




More information about the wine-cvs mailing list