schedsvc: Avoid deadlock when scheduler service starts rpcss.
Sebastian Lackner
sebastian at fds-team.de
Thu Sep 1 14:44:24 CDT 2016
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
---
Fixes test failures in taskschd introduced by 8df5add2d7aac41a9299c100cde7977b3549cfb7.
The deadlock occurs because the database is still locked by the scheduler startup when
RPC_Init tries to start up rpcss.
dlls/schedsvc/svc_main.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/dlls/schedsvc/svc_main.c b/dlls/schedsvc/svc_main.c
index b559311..45496c9 100644
--- a/dlls/schedsvc/svc_main.c
+++ b/dlls/schedsvc/svc_main.c
@@ -175,8 +175,6 @@ void WINAPI ServiceMain(DWORD argc, LPWSTR *argv)
{
TRACE("starting Task Scheduler Service\n");
- if (RPC_init() != RPC_S_OK) return;
-
schedsvc_handle = RegisterServiceCtrlHandlerW(scheduleW, schedsvc_handler);
if (!schedsvc_handle)
{
@@ -186,11 +184,15 @@ void WINAPI ServiceMain(DWORD argc, LPWSTR *argv)
done_event = CreateEventW(NULL, TRUE, FALSE, NULL);
- schedsvc_update_status(SERVICE_RUNNING);
+ schedsvc_update_status(SERVICE_START_PENDING);
- WaitForSingleObject(done_event, INFINITE);
+ if (RPC_init() == RPC_S_OK)
+ {
+ schedsvc_update_status(SERVICE_RUNNING);
+ WaitForSingleObject(done_event, INFINITE);
+ RPC_finish();
+ }
- RPC_finish();
schedsvc_update_status(SERVICE_STOPPED);
TRACE("exiting Task Scheduler Service\n");
--
2.9.0
More information about the wine-patches
mailing list