code: synchronized void scheduleRetry(long retryInterval)
      {
          // Synchronized to insure a destroyed or cancelled (ivTaskHanler=null)
          // timer is not re-scheduled. If the timer is in the cancelled state
          // but not yet destroyed, then reset the expiration back to the last
          // expiration since it was never completed successfully. If the cancel
          // does rollback then schedule will be called again and re-create the
          // task handler. The only side effect of this is that the retry count
          // is reset; so the timer may experience more retries than configured. RTC107334
  
          if (!ivDestroyed)
          {
              if (ivTaskHandler != null)
              {
                  ivTaskHandler.scheduleRetry(retryInterval);
              }
              else
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "scheduleRetry: not scheduled, timer in cancelled state : " + ivTaskId);
                  ivExpiration = ivLastExpiration;
              }
          }
      }
docs: Called by the TimerTaskHandler after failing to complete a timer
  expiration, to schedule a retry expiration. <p>
  
  {@link #calculateNextExpiration()} must be called prior to the first
  call to this method or the timer will not be scheduled properly. <p>