VirtualBox

Changeset 45697 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Apr 24, 2013 1:30:50 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
85242
Message:

GuestCtrl: Various bugfixes required for test driver to pass.

Location:
trunk/src/VBox/Main/src-client
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/GuestProcessImpl.cpp

    r45482 r45697  
    736736
    737737    com::SafeArray<BYTE> data((size_t)dataCb.cbData);
    738     data.initFrom((BYTE*)dataCb.pvData, dataCb.cbData);
     738    if (dataCb.cbData)
     739        data.initFrom((BYTE*)dataCb.pvData, dataCb.cbData);
    739740
    740741    fireGuestProcessOutputEvent(mEventSource, mSession, this,
     
    755756    /* pcbRead is optional. */
    756757
    757     /** @todo Validate uHandle. */
    758 
    759758    AutoWriteLock alock(this COMMA_LOCKVAL_SRC_POS);
    760759
    761     if (mData.mStatus != ProcessStatus_Started)
     760    if (   mData.mStatus != ProcessStatus_Started
     761        /* Skip reading if the process wasn't started with the appropriate
     762         * flags. */
     763        || (   (   uHandle == OUTPUT_HANDLE_ID_STDOUT
     764                || uHandle == OUTPUT_HANDLE_ID_STDOUT_DEPRECATED)
     765            && !(mData.mProcess.mFlags & ProcessCreateFlag_WaitForStdOut))
     766        || (   uHandle == OUTPUT_HANDLE_ID_STDERR
     767            && !(mData.mProcess.mFlags & ProcessCreateFlag_WaitForStdErr))
     768       )
    762769    {
    763770        if (pcbRead)
     
    780787        paParms[i++].setUInt32(0 /* Flags, none set yet. */);
    781788
     789        alock.release(); /* Drop the write lock before sending. */
     790
    782791        vrc = sendCommand(HOST_EXEC_GET_OUTPUT, i, paParms);
    783792    }
    784793
    785794    if (RT_SUCCESS(vrc))
    786     {
    787         alock.release(); /* Drop the write lock before waiting. */
    788 
    789795        vrc = waitForOutput(uHandle, uTimeoutMS,
    790796                            pvData, cbData, pcbRead);
    791     }
    792797
    793798    LogFlowFuncLeaveRC(vrc);
     
    904909        if (RT_SUCCESS(vrc))
    905910            vrc = mData.mProcess.mEnvironment.BuildEnvironmentBlock(&pvEnv, &cbEnv, NULL /* cEnv */);
     911
     912        uint32_t uTimeoutMS = mData.mProcess.mTimeoutMS;
    906913
    907914        if (RT_SUCCESS(vrc))
     
    939946                paParms[i++].setUInt32(UINT32_MAX /* Infinite timeout */);
    940947            else
    941                 paParms[i++].setUInt32(mData.mProcess.mTimeoutMS);
     948                paParms[i++].setUInt32(uTimeoutMS);
    942949            if (uProtocol >= 2)
    943950            {
     
    950957            }
    951958
     959            alock.release(); /* Drop the write lock before sending. */
     960
    952961            /* Note: Don't hold the write lock in here. */
    953962            vrc = sendCommand(HOST_EXEC_CMD, i, paParms);
     
    963972            RTStrFree(pszArgs);
    964973
    965         uint32_t uTimeoutMS = mData.mProcess.mTimeoutMS;
    966 
    967         /* Drop the write lock again before waiting. */
    968         alock.release();
    969 
    970974        if (RT_SUCCESS(vrc))
    971975        {
    972             vrc = waitForStatusChange(ProcessWaitForFlag_Start, 30 * 1000 /* Timeout */,
     976            vrc = waitForStatusChange(ProcessWaitForFlag_Start, uTimeoutMS,
    973977                                      NULL /* Process status */, pGuestRc);
    974978        }
     
    10551059        paParms[i++].setUInt32(mData.mPID);
    10561060
     1061        alock.release(); /* Drop the write lock before sending. */
     1062
    10571063        vrc = sendCommand(HOST_EXEC_TERMINATE, i, paParms);
    10581064    }
    10591065
    10601066    if (RT_SUCCESS(vrc))
    1061     {
    1062         alock.release(); /* Drop the write lock before waiting. */
    1063 
    10641067        vrc = waitForStatusChange(ProcessWaitForFlag_Terminate,
    10651068                                  30 * 1000 /* 30s timeout */,
    10661069                                  NULL /* ProcessStatus */, pGuestRc);
    1067     }
    1068 
    10691070    LogFlowFuncLeaveRC(vrc);
    10701071    return vrc;
     
    12671268    if (SUCCEEDED(hr))
    12681269    {
    1269         LogFlowThisFunc(("Waiting for guest file event(s) (timeout=%RU32ms, %zu events) ...\n",
     1270        LogFlowThisFunc(("Waiting for guest process event(s) (timeout=%RU32ms, %zu events) ...\n",
    12701271                         uTimeoutMS, arrEventTypes.size()));
    12711272
     
    14271428                    ComAssertComRC(hr);
    14281429                    size_t cbRead = data.size();
    1429                     if (   cbRead
    1430                         && cbRead <= cbData)
     1430                    if (cbRead)
    14311431                    {
    1432                         memcpy(pvData, data.raw(), data.size());
     1432                        if (cbRead <= cbData)
     1433                        {
     1434                            /* Copy data from event into our buffer. */
     1435                            memcpy(pvData, data.raw(), data.size());
     1436                        }
     1437                        else
     1438                            vrc = VERR_BUFFER_OVERFLOW;
    14331439                    }
    1434                     else
    1435                         vrc = VERR_BUFFER_OVERFLOW;
    14361440                }
    14371441                if (pcbRead)
    14381442                {
    1439                     hr = pProcessEvent->COMGETTER(Processed)((ULONG*)pcbRead);
     1443                    ULONG cbRead;
     1444                    hr = pProcessEvent->COMGETTER(Processed)(&cbRead);
    14401445                    ComAssertComRC(hr);
     1446                    *pcbRead = (uint32_t)cbRead;
    14411447                }
    14421448
     
    15251531        paParms[i++].setUInt32(cbData);
    15261532
     1533        alock.release(); /* Drop the write lock before sending. */
     1534
    15271535        vrc = sendCommand(HOST_EXEC_SET_INPUT, i, paParms);
    15281536    }
     
    15301538    if (RT_SUCCESS(vrc))
    15311539    {
    1532         alock.release(); /* Drop the write lock before waiting. */
    1533 
    15341540        ProcessInputStatus_T inputStatus;
    15351541        uint32_t cbProcessed;
     
    15931599    }
    15941600
    1595     LogFlowThisFunc(("rc=%Rrc, cbRead=%RU64\n", vrc, cbRead));
     1601    LogFlowThisFunc(("rc=%Rrc, cbRead=%RU32\n", vrc, cbRead));
    15961602
    15971603    LogFlowFuncLeaveRC(vrc);
     
    17361742    if (FAILED(autoCaller.rc())) return autoCaller.rc();
    17371743
     1744    com::SafeArray<BYTE> data(ComSafeArrayInArg(aData));
     1745
    17381746    HRESULT hr = S_OK;
    17391747
    1740     com::SafeArray<BYTE> data(ComSafeArrayInArg(aData)); int guestRc;
    1741     int vrc = writeData(aHandle, aFlags, data.raw(), data.size(), aTimeoutMS, (uint32_t*)aWritten, &guestRc);
     1748    uint32_t cbWritten; int guestRc;
     1749    int vrc = writeData(aHandle, aFlags, data.raw(), data.size(), aTimeoutMS, &cbWritten, &guestRc);
    17421750    if (RT_FAILURE(vrc))
    17431751    {
     
    17561764    }
    17571765
    1758     LogFlowThisFunc(("rc=%Rrc, aWritten=%RU32\n", vrc, aWritten));
     1766    LogFlowThisFunc(("rc=%Rrc, aWritten=%RU32\n", vrc, cbWritten));
     1767
     1768    *aWritten = (ULONG)cbWritten;
    17591769
    17601770    LogFlowFuncLeaveRC(vrc);
  • trunk/src/VBox/Main/src-client/GuestSessionImpl.cpp

    r45434 r45697  
    13581358                         pCurProc->getObjectID(), mData.mSession.mID, uPID, mData.mProcesses.size() - 1, mData.mNumObjects - 1));
    13591359
    1360             LogFlowFunc(("1\n"));
    13611360            mData.mProcesses.erase(itProcs);
    13621361            mData.mNumObjects--;
    13631362
    1364             LogFlowFunc(("2\n"));
    13651363            fireGuestProcessRegisteredEvent(mEventSource, this /* Session */, NULL /* Process */,
    13661364                                            uPID, false /* Process unregistered */);
    1367             LogFlowFunc(("3\n"));
    13681365            rc = VINF_SUCCESS;
    13691366            break;
    13701367        }
    13711368
    1372         LogFlowFunc(("4\n"));
    13731369        itProcs++;
    13741370    }
Note: See TracChangeset for help on using the changeset viewer.

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