protected void removeMessage ( LMEMessage message ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . entry ( tc , "removeMessage" , new Object [ ] { new Integer ( hashCode ( ) ) , message , this } ) ; // If this was the message we entered the callback with we need // to move the start point back a bit if ( message == callbackEntryMsg ) callbackEntryMsg = message . previous ; // If this is our current message we need to move the cursor // back a bit if ( message == currentMsg ) currentMsg = message . previous ; // If this message was the next to expire we move the expiry cursor on to // the next eligible message. We leave any alarm registered so that it pops, // when this happens it realises the alarm is not valid for the next expiring // message and re-registers itself for the correct time. This gives us the // best performance when no locks are expiring as we're not continually // registering and de-registering alarms for every message if ( message == nextMsgToExpire ) { do { nextMsgToExpire = nextMsgToExpire . next ; } while ( ( nextMsgToExpire != null ) && ( nextMsgToExpire . expiryTime == 0 ) ) ; } if ( message == nextMsgReferenceToExpire ) { do { nextMsgReferenceToExpire = nextMsgReferenceToExpire . next ; } while ( ( nextMsgReferenceToExpire != null ) && ( nextMsgReferenceToExpire . expiryTime == 0 ) ) ; } // Unlink this message from the list if ( message . previous != null ) message . previous . next = message . next ; else firstMsg = message . next ; if ( message . next != null ) message . next . previous = message . previous ; else lastMsg = message . previous ; // Pool the element if there's space if ( pooledCount < poolSize ) { message . message = null ; message . next = pooledMsg ; message . previous = null ; message . owner = null ; message . jsMessage = null ; message . expiryTime = 0 ; message . expiryMsgReferenceTime = 0 ; pooledMsg = message ; pooledCount ++ ; } if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEntryEnabled ( ) ) SibTr . exit ( tc , "removeMessage" , this ) ; }
Remove a message object from the list