docs: public final void commitPersistUnlock(PersistentTransaction transaction) throws SevereMessageStoreException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(this, tc, "commitPersistUnlock", transaction);
  
          AbstractItem item = null;
          boolean hasBecomeAvailable = false;
          boolean linkHasBecomeReleasable = false;
          synchronized (this)
          {
              if (ItemLinkState.STATE_UNLOCKING_PERSISTENTLY_LOCKED == _itemLinkState)
              {
                  _assertCorrectTransaction(transaction);
  
                  item = getItem();
  
                  ListStatistics stats = getParentStatistics();
                  synchronized (stats)
                  {
                      stats.decrementLocked();
                      stats.incrementAvailable();
                  }
  
                  // Save the item before we change the state
                  _lockID = NO_LOCK_ID;
                  _unlockCount++;
                  linkHasBecomeReleasable = _declareDiscardable();
                  _itemLinkState = ItemLinkState.STATE_AVAILABLE;
                  hasBecomeAvailable = true;
              }
              else
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled())
                      SibTr.event(this, tc, "Invalid Item state: " + _itemLinkState);
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(this, tc, "commitPersistUnlock");
                  throw new StateException(_itemLinkState.toString());
              }
              _transactionId = null;
          }
          // this stuff has to be done outside the synchronized block
          if (linkHasBecomeReleasable)
          {
              _declareReleasable(item);
          }
  
          // PK37596
          // Now we have completed an unlock we have become available again
          // and so need to inform our containing list in case we need to
          // be added to a cursors jumpback list.
          if (hasBecomeAvailable)
          {
              // all items are discardable in avaialable state.
              if (_owningStreamLink != null)
              {
                  _owningStreamLink.linkAvailable(this);
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(this, tc, "commitPersistUnlock");
      }