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, [email protected] 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);
> 
> 

_______________________________________________
Ros-dev mailing list
[email protected]
http://www.reactos.org/mailman/listinfo/ros-dev

Reply via email to