services: Be sure to unlock the current database in all error cases in service_start_process.
This commit is contained in:
parent
f1f223d001
commit
0b9ddd1ce4
@ -575,7 +575,11 @@ static DWORD service_start_process(struct service_entry *service_entry, HANDLE *
|
|||||||
|
|
||||||
size = ExpandEnvironmentStringsW(service_entry->config.lpBinaryPathName,NULL,0);
|
size = ExpandEnvironmentStringsW(service_entry->config.lpBinaryPathName,NULL,0);
|
||||||
path = HeapAlloc(GetProcessHeap(),0,size*sizeof(WCHAR));
|
path = HeapAlloc(GetProcessHeap(),0,size*sizeof(WCHAR));
|
||||||
if (!path) return ERROR_NOT_ENOUGH_SERVER_MEMORY;
|
if (!path)
|
||||||
|
{
|
||||||
|
service_unlock(service_entry);
|
||||||
|
return ERROR_NOT_ENOUGH_SERVER_MEMORY;
|
||||||
|
}
|
||||||
ExpandEnvironmentStringsW(service_entry->config.lpBinaryPathName,path,size);
|
ExpandEnvironmentStringsW(service_entry->config.lpBinaryPathName,path,size);
|
||||||
|
|
||||||
if (service_entry->config.dwServiceType == SERVICE_KERNEL_DRIVER)
|
if (service_entry->config.dwServiceType == SERVICE_KERNEL_DRIVER)
|
||||||
@ -590,6 +594,7 @@ static DWORD service_start_process(struct service_entry *service_entry, HANDLE *
|
|||||||
if (!GetBinaryTypeW( path, &type ))
|
if (!GetBinaryTypeW( path, &type ))
|
||||||
{
|
{
|
||||||
HeapFree( GetProcessHeap(), 0, path );
|
HeapFree( GetProcessHeap(), 0, path );
|
||||||
|
service_unlock(service_entry);
|
||||||
return GetLastError();
|
return GetLastError();
|
||||||
}
|
}
|
||||||
if (type == SCS_32BIT_BINARY) GetSystemWow64DirectoryW( system_dir, MAX_PATH );
|
if (type == SCS_32BIT_BINARY) GetSystemWow64DirectoryW( system_dir, MAX_PATH );
|
||||||
@ -598,7 +603,10 @@ static DWORD service_start_process(struct service_entry *service_entry, HANDLE *
|
|||||||
len = strlenW( system_dir ) + sizeof(winedeviceW)/sizeof(WCHAR) + strlenW(service_entry->name);
|
len = strlenW( system_dir ) + sizeof(winedeviceW)/sizeof(WCHAR) + strlenW(service_entry->name);
|
||||||
HeapFree( GetProcessHeap(), 0, path );
|
HeapFree( GetProcessHeap(), 0, path );
|
||||||
if (!(path = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
|
if (!(path = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
|
||||||
|
{
|
||||||
|
service_unlock(service_entry);
|
||||||
return ERROR_NOT_ENOUGH_SERVER_MEMORY;
|
return ERROR_NOT_ENOUGH_SERVER_MEMORY;
|
||||||
|
}
|
||||||
lstrcpyW( path, system_dir );
|
lstrcpyW( path, system_dir );
|
||||||
lstrcatW( path, winedeviceW );
|
lstrcatW( path, winedeviceW );
|
||||||
lstrcatW( path, service_entry->name );
|
lstrcatW( path, service_entry->name );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user