Proper finalization in StartServiceW.
This commit is contained in:
parent
0e74f851e8
commit
8484d3fbae
|
@ -876,6 +876,8 @@ StartServiceW( SC_HANDLE hService, DWORD dwNumServiceArgs,
|
||||||
HANDLE data,wait;
|
HANDLE data,wait;
|
||||||
PROCESS_INFORMATION procinfo;
|
PROCESS_INFORMATION procinfo;
|
||||||
STARTUPINFOW startupinfo;
|
STARTUPINFOW startupinfo;
|
||||||
|
BOOL ret = FALSE;
|
||||||
|
|
||||||
TRACE("(%p,%ld,%p)\n",hService,dwNumServiceArgs,
|
TRACE("(%p,%ld,%p)\n",hService,dwNumServiceArgs,
|
||||||
lpServiceArgVectors);
|
lpServiceArgVectors);
|
||||||
|
|
||||||
|
@ -934,19 +936,27 @@ StartServiceW( SC_HANDLE hService, DWORD dwNumServiceArgs,
|
||||||
if(r == FALSE)
|
if(r == FALSE)
|
||||||
{
|
{
|
||||||
ERR("Couldn't start process\n");
|
ERR("Couldn't start process\n");
|
||||||
/* ReleaseSemaphore(data, 1, NULL);
|
goto done;
|
||||||
return FALSE; */
|
|
||||||
}
|
}
|
||||||
|
CloseHandle( procinfo.hThread );
|
||||||
|
|
||||||
/* docs for StartServiceCtrlDispatcher say this should be 30 sec */
|
/* docs for StartServiceCtrlDispatcher say this should be 30 sec */
|
||||||
r = WaitForSingleObject(wait,30000);
|
r = WaitForSingleObject(wait,30000);
|
||||||
|
if( WAIT_FAILED == r )
|
||||||
|
{
|
||||||
|
CloseHandle( procinfo.hProcess );
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* allright */
|
||||||
|
CloseHandle( procinfo.hProcess );
|
||||||
|
ret = TRUE;
|
||||||
|
|
||||||
|
done:
|
||||||
|
CloseHandle( wait );
|
||||||
ReleaseSemaphore(data, 1, NULL);
|
ReleaseSemaphore(data, 1, NULL);
|
||||||
|
CloseHandle( data );
|
||||||
if( r == WAIT_FAILED)
|
return ret;
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|
Loading…
Reference in New Issue