*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 [email protected] https://www.virtualbox.org/mailman/listinfo/vbox-dev
