docs: @Override
      public void eventUnlocked() throws SevereMessageStoreException
      {
          super.eventUnlocked();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "eventUnlocked");
  
          if (failedInitInRestore)
          {
              //we can only register the listeners if we are fully initialized
              if (stream instanceof DurableSubscriptionItemStream)
              {
                  stream.registerListeners(this);
              }
              failedInitInRestore = false;
          }
  
          reavailable = true;
  
          try
          {
              // 541867
              // When a message is unlocked, a registered ConsumerDispatcher will try to deliver
              // it to a ready consumer. When this happens the consumer will register for the UNLOCK
              // event. If that is added to a later slot (e.g. UNLOCKED_3) than the one that's currently
              // being processed (the ConsumerDispatcher) it is possible for us to drive the new consumer's
              // unlock event straight away (even though the message has just been locked).
  
              // This can also result in two (or more) consumers (or multiple instances of the same consumer)
              // being registered on the same message as we may not have deregistered the initial consumer
              // at the time that the ConsumerDispatcher delivers the to the second (or the same) consumer
              // after the unlock.
  
              // The solution is to proccess all the non-ConsumerDispatchers registered before going back
              // and driving the ConsumerDispatcher.
              for (int pass = 0; pass < 2; pass++)
              {
                  if ((UNLOCKED_1 != null) &&
                      (((pass == 0) && !(UNLOCKED_1 instanceof ConsumerDispatcher)) ||
                      ((pass == 1) && (UNLOCKED_1 instanceof ConsumerDispatcher))))
                  {
                      UNLOCKED_1.messageEventOccurred(MessageEvents.UNLOCKED, this, null);
                  }
                  if ((UNLOCKED_2 != null) &&
                      (((pass == 0) && !(UNLOCKED_2 instanceof ConsumerDispatcher)) ||
                      ((pass == 1) && (UNLOCKED_2 instanceof ConsumerDispatcher))))
                  {
                      UNLOCKED_2.messageEventOccurred(MessageEvents.UNLOCKED, this, null);
                  }
                  if ((UNLOCKED_3 != null) &&
                      (((pass == 0) && !(UNLOCKED_3 instanceof ConsumerDispatcher)) ||
                      ((pass == 1) && (UNLOCKED_3 instanceof ConsumerDispatcher))))
                  {
                      UNLOCKED_3.messageEventOccurred(MessageEvents.UNLOCKED, this, null);
                  }
              }
          } catch (SIException e)
          {
              FFDCFilter.processException(
                                          e,
                                          "com.ibm.ws.sib.processor.impl.store.items.MessageItemReference.eventUnlocked",
                                          "1:574:1.106",
                                          this);
  
              SibTr.exception(tc, e);
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "eventUnlocked", e);
  
              throw new SIErrorException(e);
          }
          reavailable = false;
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "eventUnlocked");
      }