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

Andreas Löffler andreas.loeffler at oracle.com
Wed Dec 17 14:41:05 GMT 2014


Hi,

thanks for pointing out and supplying a fix -- we're going to
reproduce the issue internally and providing a fix for the next
upcoming maintenance release.

Regards,
Andreas


Kind regards / Mit freundlichen Grüßen

******************************************************************
Andreas Löffler          | VirtualBox Engineering
Senior Software Engineer | Oracle Virtualization

ORACLE Deutschland B.V. & Co. KG
Schiffbauergasse 14
D-14467 Potsdam, Germany

Hauptverwaltung: Riesstr. 25, D-80992 München
Registergericht: Amtsgericht München, HRA 95603
Geschäftsführer: Jürgen Kunz

Komplementärin: ORACLE Deutschland Verwaltung B.V.
Hertogswetering 163/167, 3543 AS Utrecht, Niederlande
Handelsregister der Handelskammer Midden-Niederlande, Nr. 30143697
Geschäftsführer: Alexander van der Ven, Astrid Kepper, Val Maher

Green Oracle <http://www.oracle.com/commitment>
Oracle is committed to developing practices and products that
help protect the environment


On 17.12.2014 08:44, Woof wrote:
> *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.
> 
> ==
> 
> 
> 
> 
> _______________________________________________ vbox-dev mailing
> list vbox-dev at virtualbox.org 
> https://www.virtualbox.org/mailman/listinfo/vbox-dev
> 




More information about the vbox-dev mailing list