docs: public final boolean addExpirable(Expirable expirable) throws SevereMessageStoreException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          {
              SibTr.entry(tc, "addExpirable",
                         "objId="
                         + (expirable == null ? "null" : String.valueOf(expirable.expirableGetID()))
                         + " addEnabled="
                         + addEnabled);
          }
  
          boolean reply = false;
  
          // Ignore this entry if the expirer has ended or the given entry is null
          if (addEnabled && expirable != null)
          {
              long expiryTime = expirable.expirableGetExpiryTime();
  
              ExpirableReference expirableRef = new ExpirableReference(expirable);
              expirableRef.setExpiryTime(expiryTime);
  
              // Ignore this entry if the referenced item has already gone from the message store. 
              if (expirable.expirableIsInStore())
              {
                  synchronized (lockObject)
                  {
                      // Add the expirable to the expiry index
                      reply = expiryIndex.put(expirableRef);
                      if (reply)
                      {
                          boolean scheduled = false;
                          if (runEnabled && expiryIndex.size() == 1) // We just added the first entry
                          {
                              scheduleAlarm(interval);
                              scheduled = true;
                          }
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          {
                              SibTr.debug(tc, "Added: ET="+expirableRef.getExpiryTime()+", objId="+expirableRef.getID()+", scheduled="+scheduled);
                          }
                      }
                      else
                      {
                          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          {
                              SibTr.debug(tc, "Duplicate expirable: ET="+expirableRef.getExpiryTime()+", objId="+expirableRef.getID());
                          }
                          runEnabled = false; // End the expiry daemon thread
                          Object[] o = { expirableRef.getExpiryTime() + " : " + expirableRef.getID()};
                          SevereMessageStoreException e = new SevereMessageStoreException("DUPLICATE_EXPIRABLE_SIMS2000", o);
                          lastException = e;
                          lastExceptionTime = timeNow();
                          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "addExpirable");
                          throw e;
                      }
                  }
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "addExpirable", "reply=" + reply);
          return reply;
      }