This commit breaks 2nd stage setup. It fails just before device enumeration with the message: "CMP_WaitNoPendingInstallEvents() failed". The official buildbot also exhibits this bug.
Thanks, Cameron Gutman
On Oct 30, 2010, at 3:25 PM, ekohl@svn.reactos.org wrote:
Author: ekohl Date: Sat Oct 30 19:25:23 2010 New Revision: 49366
URL: http://svn.reactos.org/svn/reactos?rev=49366&view=rev Log: Merge ScmControlService() and ScmSendStartCommand() into ScmSendServiceCommand().
Modified: trunk/reactos/base/system/services/database.c trunk/reactos/base/system/services/rpcserver.c trunk/reactos/base/system/services/services.h
Modified: trunk/reactos/base/system/services/database.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/databa... ============================================================================== --- trunk/reactos/base/system/services/database.c [iso-8859-1] (original) +++ trunk/reactos/base/system/services/database.c [iso-8859-1] Sat Oct 30 19:25:23 2010 @@ -678,66 +678,10 @@
DWORD -ScmControlService(PSERVICE Service,
DWORD dwControl)-{
- PSCM_CONTROL_PACKET ControlPacket;
- SCM_REPLY_PACKET ReplyPacket;
- DWORD dwWriteCount = 0;
- DWORD dwReadCount = 0;
- DWORD TotalLength;
- DWORD dwError = ERROR_SUCCESS;
- DPRINT("ScmControlService() called\n");
- TotalLength = wcslen(Service->lpServiceName) + 1;
- ControlPacket = (SCM_CONTROL_PACKET*)HeapAlloc(GetProcessHeap(),
HEAP_ZERO_MEMORY,sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR)));- if (ControlPacket == NULL)
return ERROR_NOT_ENOUGH_MEMORY;- ControlPacket->dwControl = dwControl;
- ControlPacket->dwSize = TotalLength;
- ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service;
- wcscpy(&ControlPacket->szArguments[0], Service->lpServiceName);
- /* Send the control packet */
- WriteFile(Service->ControlPipeHandle,
ControlPacket,sizeof(SCM_CONTROL_PACKET) + (TotalLength * sizeof(WCHAR)),&dwWriteCount,NULL);- /* Read the reply */
- ReadFile(Service->ControlPipeHandle,
&ReplyPacket,sizeof(SCM_REPLY_PACKET),&dwReadCount,NULL);- /* Release the contol packet */
- HeapFree(GetProcessHeap(),
0,ControlPacket);- if (dwReadCount == sizeof(SCM_REPLY_PACKET))
- {
dwError = ReplyPacket.dwError;- }
- DPRINT("ScmControlService() done\n");
- return dwError;
-}
-static DWORD -ScmSendStartCommand(PSERVICE Service,
DWORD argc,LPWSTR *argv)+ScmSendServiceCommand(PSERVICE Service,
DWORD dwControl,DWORD argc,LPWSTR *argv){ PSCM_CONTROL_PACKET ControlPacket; SCM_REPLY_PACKET ReplyPacket; @@ -750,7 +694,7 @@ DWORD dwError = ERROR_SUCCESS; DWORD i;
- DPRINT("ScmSendStartCommand() called\n");
DPRINT("ScmSendServiceCommand() called\n");
/* Calculate the total length of the start command line */ TotalLength = wcslen(Service->lpServiceName) + 1;
@@ -774,7 +718,7 @@ if (ControlPacket == NULL) return ERROR_NOT_ENOUGH_MEMORY;
- ControlPacket->dwControl = SERVICE_CONTROL_START;
- ControlPacket->dwControl = dwControl; ControlPacket->hServiceStatus = (SERVICE_STATUS_HANDLE)Service; ControlPacket->dwSize = TotalLength; Ptr = &ControlPacket->szArguments[0];
@@ -819,7 +763,7 @@ dwError = ReplyPacket.dwError; }
- DPRINT("ScmSendStartCommand() done\n");
DPRINT("ScmSendServiceCommand() done\n");
return dwError;
} @@ -998,7 +942,10 @@ DPRINT("Received service process ID %lu\n", dwProcessId);
/* Send start command */
dwError = ScmSendStartCommand(Service, argc, argv);
dwError = ScmSendServiceCommand(Service,SERVICE_CONTROL_START,argc, } elseargv); }@@ -1227,7 +1174,10 @@ CurrentService->Status.dwCurrentState == SERVICE_START_PENDING) { /* shutdown service */
ScmControlService(CurrentService, SERVICE_CONTROL_STOP);
ScmSendServiceCommand(CurrentService,SERVICE_CONTROL_STOP,0,NULL); } ServiceEntry = ServiceEntry->Flink;Modified: trunk/reactos/base/system/services/rpcserver.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/rpcser... ============================================================================== --- trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] (original) +++ trunk/reactos/base/system/services/rpcserver.c [iso-8859-1] Sat Oct 30 19:25:23 2010 @@ -699,8 +699,10 @@ }
/* Send control code to the service */
dwError = ScmControlService(lpService,dwControl);
dwError = ScmSendServiceCommand(lpService,dwControl,0,NULL); /* Return service status information */ RtlCopyMemory(lpServiceStatus,@@ -2864,7 +2866,10 @@ }
/* Start the service */
- dwError = ScmStartService(lpService, argc, (LPWSTR *)argv);
dwError = ScmSendServiceCommand(lpService,
SERVICE_CONTROL_START,argc,(LPWSTR *)argv);return dwError;
} @@ -4072,7 +4077,10 @@ /* FIXME: Convert argument vector to Unicode */
/* Start the service */
- dwError = ScmStartService(lpService, 0, NULL);
dwError = ScmSendServiceCommand(lpService,
SERVICE_CONTROL_START,0,NULL);/* FIXME: Free argument vector */
Modified: trunk/reactos/base/system/services/services.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/system/services/servic... ============================================================================== --- trunk/reactos/base/system/services/services.h [iso-8859-1] (original) +++ trunk/reactos/base/system/services/services.h [iso-8859-1] Sat Oct 30 19:25:23 2010 @@ -104,9 +104,10 @@ VOID ScmGetBootAndSystemDriverState(VOID); VOID ScmAutoStartServices(VOID); VOID ScmAutoShutdownServices(VOID); -DWORD ScmStartService(PSERVICE Service,
DWORD argc,LPWSTR *argv);+DWORD ScmSendServiceCommand(PSERVICE Service,
DWORD dwControl,DWORD argc,LPWSTR *argv);PSERVICE ScmGetServiceEntryByName(LPCWSTR lpServiceName); PSERVICE ScmGetServiceEntryByDisplayName(LPCWSTR lpDisplayName); @@ -115,9 +116,6 @@ PSERVICE *lpServiceRecord); VOID ScmDeleteServiceRecord(PSERVICE lpService); DWORD ScmMarkServiceForDelete(PSERVICE pService);
-DWORD ScmControlService(PSERVICE Service,
DWORD dwControl);BOOL ScmLockDatabaseExclusive(VOID); BOOL ScmLockDatabaseShared(VOID);