Rob Shearman : services: Split RPC_MainLoop into initialisation and the actual loop.

Alexandre Julliard julliard at winehq.org
Fri Apr 11 06:28:28 CDT 2008


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

Author: Rob Shearman <rob at codeweavers.com>
Date:   Fri Apr 11 10:59:51 2008 +0100

services: Split RPC_MainLoop into initialisation and the actual loop.

---

 programs/services/rpc.c      |   18 +++++++++++++-----
 programs/services/services.c |    3 ++-
 programs/services/services.h |    1 +
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/programs/services/rpc.c b/programs/services/rpc.c
index 0adeb12..411fca7 100644
--- a/programs/services/rpc.c
+++ b/programs/services/rpc.c
@@ -1333,11 +1333,10 @@ DWORD svcctl_QueryServiceConfig2W(
 }
 
 
-DWORD RPC_MainLoop(void)
+DWORD RPC_Init(void)
 {
     WCHAR transport[] = SVCCTL_TRANSPORT;
     WCHAR endpoint[] = SVCCTL_ENDPOINT;
-    HANDLE hSleepHandle;
     DWORD err;
 
     if ((err = RpcServerUseProtseqEpW(transport, 0, endpoint, NULL)) != ERROR_SUCCESS)
@@ -1357,17 +1356,26 @@ DWORD RPC_MainLoop(void)
         WINE_ERR("RpcServerListen failed with error %u\n", err);
         return err;
     }
+    return ERROR_SUCCESS;
+}
+
+DWORD RPC_MainLoop(void)
+{
+    DWORD err;
+    HANDLE hExitEvent = __wine_make_process_system();
 
-    WINE_TRACE("Entered main loop\n");
-    hSleepHandle = __wine_make_process_system();
     SetEvent(g_hStartedEvent);
+
+    WINE_TRACE("Entered main loop\n");
+
     do
     {
-        err = WaitForSingleObjectEx(hSleepHandle, INFINITE, TRUE);
+        err = WaitForSingleObjectEx(hExitEvent, INFINITE, TRUE);
         WINE_TRACE("Wait returned %d\n", err);
     } while (err != WAIT_OBJECT_0);
 
     WINE_TRACE("Object signaled - wine shutdown\n");
+    CloseHandle(hExitEvent);
     return ERROR_SUCCESS;
 }
 
diff --git a/programs/services/services.c b/programs/services/services.c
index 01e80cc..8a88e59 100644
--- a/programs/services/services.c
+++ b/programs/services/services.c
@@ -454,7 +454,8 @@ int main(int argc, char *argv[])
         return err;
     if ((err = scmdatabase_load_services(active_database)) != ERROR_SUCCESS)
         return err;
-    err = RPC_MainLoop();
+    if ((err = RPC_Init()) == ERROR_SUCCESS)
+        RPC_MainLoop();
     scmdatabase_destroy(active_database);
     return err;
 }
diff --git a/programs/services/services.h b/programs/services/services.h
index 246e1bb..1a5a4ee 100644
--- a/programs/services/services.h
+++ b/programs/services/services.h
@@ -77,6 +77,7 @@ void service_unlock(struct service_entry *service);
 
 extern HANDLE g_hStartedEvent;
 
+DWORD RPC_Init(void);
 DWORD RPC_MainLoop(void);
 
 /* from utils.c */




More information about the wine-cvs mailing list