VirtualBox

Changeset 56958 in vbox for trunk/src/VBox/Main/src-server


Ignore:
Timestamp:
Jul 16, 2015 5:29:44 PM (9 years ago)
Author:
vboxsync
Message:

ClientWatcher.cpp: Deal with possible race between watcher getting the session PID and the session/who-ever reporting the PID.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-server/ClientWatcher.cpp

    r55401 r56958  
    186186            break;
    187187
     188        bool fPidRace = false;
    188189        do
    189190        {
     
    194195                                                handles,
    195196                                                FALSE,
    196                                                 INFINITE);
     197                                                !fPidRace ? INFINITE : 500);
    197198
    198199            /* Restore the caller before using VirtualBox. If it fails, this
     
    202203                break;
    203204
    204             bool update = false;
     205            bool update = fPidRace;
    205206
    206207            if (rc == WAIT_OBJECT_0)
     
    275276
    276277                /* obtain a new set of spawned machines */
     278                fPidRace = false;
    277279                cntSpawned = 0;
    278280                spawnedMachines.clear();
     
    292294                        if (SUCCEEDED(hrc))
    293295                        {
    294                             HANDLE ph = OpenProcess(SYNCHRONIZE, FALSE, pid);
    295                             AssertMsg(ph != NULL, ("OpenProcess (pid=%d) failed with %d\n",
    296                                                    pid, GetLastError()));
    297                             if (ph != NULL)
     296                            if (pid != NIL_RTPROCESS)
    298297                            {
    299                                 spawnedMachines.push_back(*it);
    300                                 handles[1 + cnt + cntSpawned] = ph;
    301                                 ++cntSpawned;
     298                                HANDLE hProc = OpenProcess(SYNCHRONIZE, FALSE, pid);
     299                                AssertMsg(hProc != NULL, ("OpenProcess (pid=%d) failed with %d\n", pid, GetLastError()));
     300                                if (hProc != NULL)
     301                                {
     302                                    spawnedMachines.push_back(*it);
     303                                    handles[1 + cnt + cntSpawned] = hProc;
     304                                    ++cntSpawned;
     305                                }
    302306                            }
     307                            else
     308                                fPidRace = true;
    303309                        }
    304310                    }
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