Proper finalization in StartServiceW.

This commit is contained in:
Alexander Yaworsky 2004-09-14 19:39:19 +00:00 committed by Alexandre Julliard
parent 0e74f851e8
commit 8484d3fbae
1 changed files with 17 additions and 7 deletions

View File

@ -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;
} }
/****************************************************************************** /******************************************************************************