[ros-dev] [ros-diffs] [ekohl] 49366: Merge ScmControlService() and ScmSendStartCommand() into ScmSendServiceCommand().
Cameron Gutman
cameron.gutman at reactos.org
Sat Oct 30 21:03:14 UTC 2010
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 at 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/database.c?rev=49366&r1=49365&r2=49366&view=diff
> ==============================================================================
> --- 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,
> + argv);
> }
> }
> else
> @@ -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/rpcserver.c?rev=49366&r1=49365&r2=49366&view=diff
> ==============================================================================
> --- 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/services.h?rev=49366&r1=49365&r2=49366&view=diff
> ==============================================================================
> --- 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);
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.reactos.org/pipermail/ros-dev/attachments/20101030/6c84e800/attachment-0001.htm>
More information about the Ros-dev
mailing list