[vbox-dev] Failed Copying large file using VBoxManage CopyTo command.

Woof he1.woof at gmail.com
Wed Dec 17 07:44:18 GMT 2014


*Host : Windows7, Guest : Windows7 **but I think O/S is not condition of
this problem.

I had problem that 'CopyTo' command using VBoxManage.exe when copying large
file. so I tried searching answer of it.
I found ticket #11329(https://www.virtualbox.org/ticket/11329).
This article says timeout is too short on 'GuestSessionImplTasks.cpp'.. but
REAL problem is not here. *The problem is timeout in VBoxService.exe.*
*The Worker thread in VBoxService is given life time(timeout) when it
starts. The timeout value is 30second. yes, It is too short.*

I modify the code using new timeout value(20minute), it works.

*So I think the timeout value should be variable value depend on job. AND I
found weird code about checking timeout.*
It looks like try to 'terminating process' + 'checking process terminated
until 20minute'

4.2
\src\VBox\Additions\common\VBoxService\VBoxService\VBoxServiceControlThread.cpp
VBoxServiceControlThreadProcLoop()

        /*
         * Check for timed out, killing the process.
         */
        uint32_t cMilliesLeft = RT_INDEFINITE_WAIT;
        if (cMsTimeout != RT_INDEFINITE_WAIT)
        {
            uint64_t u64Now = RTTimeMilliTS();
            uint64_t cMsElapsed = u64Now - MsStart;
            if (cMsElapsed >= cMsTimeout)
            {
                VBoxServiceVerbose(3, "[PID %u]: Timed out (%RU64ms elapsed
> %RU32ms timeout, fProcessAlive=%RTbool), killing ...\n",
                                   pThread->uPID, cMsElapsed, cMsTimeout,
fProcessAlive);

                fProcessTimedOut = true;
                if (    MsProcessKilled == UINT64_MAX
                    ||  u64Now - MsProcessKilled > 1000)
                {
                    if (u64Now - MsProcessKilled > 20*60*1000)
                        break; /* Give up after 20 mins. */
                    rc2 = RTProcTerminate(hProcess); << never reaching here
because  MsProcessKilled is UINT64_MAX
                    VBoxServiceVerbose(3, "[PID %u]: Killing process
resulted in rc=%Rrc\n",
                                       pThread->uPID, rc2);
                    MsProcessKilled = u64Now;
                    continue;
                }
                cMilliesLeft = 10 * 1000;
            }
            else
                cMilliesLeft = cMsTimeout - (uint32_t)cMsElapsed;
        }
4.3 \src\VBox\Additions\common\VBoxService\VBoxServiceControlProcess.cpp
gstcntlProcessProcLoop()
        /*
         * Check for timed out, killing the process.
         */
        uint32_t cMilliesLeft = RT_INDEFINITE_WAIT;
        if (   pProcess->StartupInfo.uTimeLimitMS != RT_INDEFINITE_WAIT
            && pProcess->StartupInfo.uTimeLimitMS != 0)
        {
            uint64_t u64Now = RTTimeMilliTS();
            uint64_t cMsElapsed = u64Now - uMsStart;
            if (cMsElapsed >= pProcess->StartupInfo.uTimeLimitMS)
            {
                fProcessTimedOut = true;
                if (    MsProcessKilled == UINT64_MAX
                    ||  u64Now - MsProcessKilled > 1000)
                {
                    if (u64Now - MsProcessKilled > 20*60*1000)
                        break; /* Give up after 20 mins. */

    ## never reaching here because  MsProcessKilled is UINT64_MAX
                    VBoxServiceVerbose(3, "[PID %RU32]: Timed out (%RU64ms
elapsed > %RU32ms timeout), killing ...\n",
                                       pProcess->uPID, cMsElapsed,
pProcess->StartupInfo.uTimeLimitMS);

                    rc2 = RTProcTerminate(pProcess->hProcess);
                    VBoxServiceVerbose(3, "[PID %RU32]: Killing process
resulted in rc=%Rrc\n",
                                       pProcess->uPID, rc2);
                    MsProcessKilled = u64Now;
                    continue;
                }
                cMilliesLeft = 10000;
            }
            else
                cMilliesLeft = pProcess->StartupInfo.uTimeLimitMS -
(uint32_t)cMsElapsed;
        }

I hope this can help fixing the problem.

==
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20141217/237e5107/attachment.html>


More information about the vbox-dev mailing list