Module: wine Branch: master Commit: 559fafebbf648925bbaab61ab61894b11c90c104 URL: http://source.winehq.org/git/wine.git/?a=commit;h=559fafebbf648925bbaab61ab6...
Author: Rob Shearman rob@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 */