VirtualBox

Changeset 30076 in vbox for trunk


Ignore:
Timestamp:
Jun 7, 2010 2:24:45 PM (15 years ago)
Author:
vboxsync
Message:

xpcom/ipcd: fix a message handling regression which led to crashes due to incorrectly updated message queue on message discard

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/xpcom18a4/ipc/ipcd/client/src/ipcdclient.cpp

    r30052 r30076  
    384384        if (acceptedRV != IPC_WAIT_NEXT_MESSAGE)
    385385        {
    386           // remove from pending queue
    387           if (beforeLastChecked)
    388             td->pendingQ.RemoveAfter(beforeLastChecked);
    389           else
    390             td->pendingQ.RemoveFirst();
    391 
    392           if (acceptedRV != IPC_DISCARD_MESSAGE)
     386          if (acceptedRV == S_OK)
    393387          {
     388            // remove from pending queue
     389            if (beforeLastChecked)
     390              td->pendingQ.RemoveAfter(beforeLastChecked);
     391            else
     392              td->pendingQ.RemoveFirst();
     393
    394394            lastChecked->mNext = nsnull;
    395395            *aMsg = lastChecked;
    396396            break;
     397          }
     398          else /* acceptedRV == IPC_DISCARD_MESSAGE */
     399          {
     400            ipcMessage *nextToCheck = lastChecked->mNext;
     401
     402            // discard from pending queue
     403            if (beforeLastChecked)
     404              td->pendingQ.RemoveAfter(beforeLastChecked);
     405            else
     406              td->pendingQ.RemoveFirst();
     407
     408            lastChecked = nextToCheck;
     409
     410            continue;
    397411          }
    398412        }
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