VirtualBox

Changeset 39991 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Feb 3, 2012 4:45:00 PM (13 years ago)
Author:
vboxsync
Message:

GuestCtrl: Fixed unknown PIDs after retrieving output.

Location:
trunk/src/VBox
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r39843 r39991  
    875875                ULONG uRetExitCode, uRetFlags;
    876876                rc = pGuest->GetProcessStatus(uPID, &uRetExitCode, &uRetFlags, &retStatus);
    877                 if (SUCCEEDED(rc) && fVerbose)
    878                     RTPrintf("Exit code=%u (Status=%u [%s], Flags=%u)\n", uRetExitCode, retStatus, ctrlExecProcessStatusToText(retStatus), uRetFlags);
    879                 rcProc = ctrlExecProcessStatusToExitCode(retStatus, uRetExitCode);
     877                if (SUCCEEDED(rc))
     878                {
     879                    if (fVerbose)
     880                        RTPrintf("Exit code=%u (Status=%u [%s], Flags=%u)\n", uRetExitCode, retStatus, ctrlExecProcessStatusToText(retStatus), uRetFlags);
     881                    rcProc = ctrlExecProcessStatusToExitCode(retStatus, uRetExitCode);
     882                }
     883                else
     884                {
     885                    ctrlPrintError(pGuest, COM_IIDOF(IGuest));
     886                    rcProc = RTEXITCODE_FAILURE;
     887                }
    880888            }
    881889        }
  • trunk/src/VBox/Main/include/GuestImpl.h

    r39890 r39991  
    248248    typedef std::map< uint32_t, VBOXGUESTCTRL_PROCESS >::const_iterator GuestProcessMapIterConst;
    249249
    250     int  processGetStatus(uint32_t u32PID, PVBOXGUESTCTRL_PROCESS pProcess);
     250    int  processGetStatus(uint32_t u32PID, PVBOXGUESTCTRL_PROCESS pProcess, bool fRemove);
    251251    int  processSetStatus(uint32_t u32PID, ExecuteProcessStatus_T enmStatus, uint32_t uExitCode, uint32_t uFlags);
    252252
  • trunk/src/VBox/Main/src-client/GuestCtrlImpl.cpp

    r39957 r39991  
    994994 *
    995995 * @return  IPRT status code.
    996  * @param   u32PID
    997  * @param   pProcess
     996 * @param   u32PID                  PID of process to get status for.
     997 * @param   pProcess                Where to store the process information.
     998 * @param   fRemove                 Flag indicating whether to remove the
     999 *                                  process from the map when process marked a
     1000 *                                  exited/terminated.
    9981001 */
    999 int Guest::processGetStatus(uint32_t u32PID, PVBOXGUESTCTRL_PROCESS pProcess)
     1002int Guest::processGetStatus(uint32_t u32PID, PVBOXGUESTCTRL_PROCESS pProcess,
     1003                            bool fRemove)
    10001004{
    10011005    AssertReturn(u32PID, VERR_INVALID_PARAMETER);
     
    10151019        /* If the is marked as stopped/terminated
    10161020         * remove it from the map. */
    1017         if (it->second.mStatus != ExecuteProcessStatus_Started)
     1021        if (   fRemove
     1022            && it->second.mStatus != ExecuteProcessStatus_Started)
     1023        {
    10181024            mGuestProcessMap.erase(it);
     1025        }
    10191026
    10201027        return VINF_SUCCESS;
     
    18611868    {
    18621869        VBOXGUESTCTRL_PROCESS process;
    1863         int vrc = processGetStatus(aPID, &process);
     1870        int vrc = processGetStatus(aPID, &process, false /* Don't remove */);
    18641871        if (RT_SUCCESS(vrc))
    18651872        {
     
    20652072    {
    20662073        VBOXGUESTCTRL_PROCESS proc;
    2067         int vrc = processGetStatus(aPID, &proc);
     2074        int vrc = processGetStatus(aPID, &proc, false /* Don't remove */);
    20682075        if (RT_FAILURE(vrc))
    20692076        {
     
    22342241    {
    22352242        VBOXGUESTCTRL_PROCESS process;
    2236         int vrc = processGetStatus(aPID, &process);
     2243        int vrc = processGetStatus(aPID, &process,
     2244                                   true /* Remove when terminated */);
    22372245        if (RT_SUCCESS(vrc))
    22382246        {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette