VirtualBox

Ignore:
Timestamp:
May 17, 2010 8:35:50 AM (15 years ago)
Author:
vboxsync
Message:

VBoxManageGuestControl: first fetch the output, then check for the abort condition

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageGuestCtrl.cpp

    r29438 r29508  
    340340                /* Wait for process to exit ... */
    341341                BOOL fCompleted = false;
    342                 ULONG cbOutputData = 0;
    343                 SafeArray<BYTE> aOutputData;
    344342                while (SUCCEEDED(progress->COMGETTER(Completed(&fCompleted))))
    345343                {
     344                    SafeArray<BYTE> aOutputData;
     345                    ULONG cbOutputData = 0;
     346
    346347                    /*
    347                      * because we want to get all the output data even if the process
    348                      * already ended, we first need to check whether there is some data
    349                      * left to output before checking the actual timeout and is-process-completed
    350                      * stuff.
     348                     * Some data left to output?
    351349                     */
    352                     if (cbOutputData <= 0)
    353                     {
    354                         if (fCompleted)
    355                             break;
    356 
    357                         if (   have_timeout
    358                             && RTTimeMilliTS() - u64StartMS > u32TimeoutMS + 5000)
    359                         {
    360                             progress->Cancel();
    361                             break;
    362                         }
    363                     }
    364350
    365351                    if (   waitForStdOut
     
    392378                    }
    393379
     380                    if (cbOutputData <= 0)
     381                    {
     382                        if (fCompleted)
     383                            break;
     384
     385                        if (   have_timeout
     386                            && RTTimeMilliTS() - u64StartMS > u32TimeoutMS + 5000)
     387                        {
     388                            progress->Cancel();
     389                            break;
     390                        }
     391                    }
     392
    394393                    /* process async cancelation */
    395394                    if (g_fExecCanceled && !fCanceledAlready)
Note: See TracChangeset for help on using the changeset viewer.

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