Author: janderwald
Date: Tue Aug 11 12:37:40 2009
New Revision: 42611
URL:
http://svn.reactos.org/svn/reactos?rev=42611&view=rev
Log:
- Check if allocation succeeded
- Wait untill each audio service has been started
- May now fix randomly playing logon sound
Modified:
trunk/reactos/base/services/audiosrv/pnp.c
trunk/reactos/base/services/audiosrv/services.c
Modified: trunk/reactos/base/services/audiosrv/pnp.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/audiosrv/pnp…
==============================================================================
--- trunk/reactos/base/services/audiosrv/pnp.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/audiosrv/pnp.c [iso-8859-1] Tue Aug 11 12:37:40 2009
@@ -60,6 +60,12 @@
(PSP_DEVICE_INTERFACE_DETAIL_DATA_W)HeapAlloc(GetProcessHeap(),
0,
length);
+
+ if ( ! detail_data )
+ {
+ logmsg("ProcessExistingDevices() failed to allocate detail_data\n");
+ return TRUE;
+ }
while (
SetupDiEnumDeviceInterfaces(dev_info,
Modified: trunk/reactos/base/services/audiosrv/services.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/audiosrv/ser…
==============================================================================
--- trunk/reactos/base/services/audiosrv/services.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/audiosrv/services.c [iso-8859-1] Tue Aug 11 12:37:40 2009
@@ -17,51 +17,86 @@
#include <audiosrv/audiosrv.h>
#include "audiosrv.h"
+BOOL
+WaitForService(
+ SC_HANDLE hService,
+ ULONG RetryCount)
+{
+ ULONG Index = 0;
+ DWORD dwSize;
+ SERVICE_STATUS_PROCESS Info;
+
+ do
+ {
+ if (!QueryServiceStatusEx(hService, SC_STATUS_PROCESS_INFO, (LPBYTE)&Info,
sizeof(SERVICE_STATUS_PROCESS), &dwSize))
+ {
+ logmsg("QueryServiceStatusEx failed %x\n", GetLastError());
+ break;
+ }
+
+ if (Info.dwCurrentState == SERVICE_RUNNING)
+ return TRUE;
+
+ Sleep(1000);
+
+ }while(Index++ < RetryCount);
+
+ logmsg("Timeout while waiting for service to become ready %p\n",
hService);
+
+ return FALSE;
+}
+
+BOOL
+StartAudioService(
+ SC_HANDLE hSCManager,
+ LPWSTR ServiceName,
+ ULONG RetryCount)
+{
+ SC_HANDLE hService;
+ BOOL ret;
+
+ hService = OpenService(hSCManager, ServiceName, SERVICE_ALL_ACCESS);
+
+ if (!hService)
+ {
+ logmsg("Failed to open service %S %x\n", ServiceName, GetLastError());
+ return FALSE;
+ }
+
+ if (!StartService(hService, 0, NULL))
+ {
+ logmsg("Failed to start service %S %x\n", ServiceName,
GetLastError());
+ CloseServiceHandle(hService);
+ return FALSE;
+ }
+
+ ret = WaitForService(hService, RetryCount);
+
+ CloseServiceHandle(hService);
+ return ret;
+}
+
+
+
BOOL
StartSystemAudioServices()
{
- SC_HANDLE hSCManager, hService;
+ SC_HANDLE hSCManager;
logmsg("Starting system audio services\n");
hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (!hSCManager)
{
- logmsg("Failed to open service manager\n");
+ logmsg("Failed to open service manager %x\n", GetLastError());
return FALSE;
}
- hService = OpenService(hSCManager, L"sysaudio", SERVICE_ALL_ACCESS);
- if (hService)
- {
- if (!StartService(hService, 0, NULL))
- {
- logmsg("Failed to start sysaudio service\n");
- CloseServiceHandle(hService);
- CloseServiceHandle(hSCManager);
- return FALSE;
- }
- CloseServiceHandle(hService);
- logmsg("Sysaudio service started\n");
- // FIXME
- // wait untill service is started
- }
-
- hService = OpenService(hSCManager, L"wdmaud", SERVICE_ALL_ACCESS);
- if (hService)
- {
- if (!StartService(hService, 0, NULL))
- {
- logmsg("Failed to start sysaudio service\n");
- CloseServiceHandle(hService);
- CloseServiceHandle(hSCManager);
- return FALSE;
- }
- CloseServiceHandle(hService);
- logmsg("Wdmaud service started\n");
- }
-
+ logmsg("Starting sysaudio service\n");
+ StartAudioService(hSCManager, L"sysaudio", 20);
+ logmsg("Starting wdmaud service\n");
+ StartAudioService(hSCManager, L"wdmaud", 20);
CloseServiceHandle(hSCManager);
return TRUE;