docs: public boolean writeValue(SIMPMessage m) throws SIResourceException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(this, tc, "writeValue", m);
  
      TickRange tr = null;
      boolean sendMessage = true;
      
      long msgStoreId = AbstractItem.NO_ID;
      try
      {
        if (m.isInStore())
          msgStoreId = m.getID();
      }
      catch(MessageStoreException e)
      {
        // FFDC
        FFDCFilter.processException(
            e,
            "com.ibm.ws.sib.processor.gd.SourceStream.writeValue",
            "1:520:1.138",
            this);  
                    
        SibTr.exception(tc, e); 
        
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.exit(tc, "writeValue", e);
        
        throw new SIResourceException(e);
      }
        
      JsMessage jsMsg = m.getMessage();
  
      long stamp = jsMsg.getGuaranteedValueValueTick();
      long starts = jsMsg.getGuaranteedValueStartTick();
      long ends = jsMsg.getGuaranteedValueEndTick();
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
      {
        SibTr.debug(tc, "writeValue at: " + stamp + " with Value from: " + starts + " to " + ends + " on Stream " +  stream);
      }
  
      synchronized (this)
      {
        // Now update Value tick to indicate it is now committed
        tr = TickRange.newValueTick(stamp, null, msgStoreId);
        tr.startstamp = starts;
        tr.endstamp = ends;
  
        oststream.writeCombinedRange(tr);
        sendMessage = msgCanBeSent(stamp, false);
  
        if (sendMessage)
        {
          // Only move the lastMsgSent forward, not backwards. Other threads with greater
          // ticks could already have passed through here and moved the lastMsgSent on past
          // this tick
          if(stamp > lastMsgSent)
            lastMsgSent = stamp;
          
          if (!ackExpAlarmStarted)
          {
            ackExpAlarmStarted = true;
            timerStartSendTick = lastMsgSent;
            ackExpInterval = GDConfig.GD_ACK_EXPECTED_THRESHOLD;
            
            am.create(ackExpInterval, ackExpExpiryHandler);
          }
          
          // SIB0105
          // Message committed so reset the health state if we've solved a blocking problem
          if (blockedStreamAlarm != null)
            blockedStreamAlarm.checkState(false);        
        }
  
      } // end synchronized
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "writeValue", Boolean.valueOf(sendMessage));
  
      return sendMessage;
    }