[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