code: synchronized Thread triggerUpdate() {
          if (inProgress != null) {
              if (!inProgress.isAlive()) {
                  LOGGER.log(Level.WARNING, "Previous {0} monitoring activity died without cleaning up after itself",
                      getDisplayName());
                  inProgress = null;
              } else if (System.currentTimeMillis() > inProgressStarted + getMonitoringTimeOut() + 1000) {
                  // maybe it got stuck?
                  LOGGER.log(Level.WARNING, "Previous {0} monitoring activity still in progress. Interrupting",
                          getDisplayName());
                  inProgress.interrupt();
                  inProgress = null; // we interrupted the old one so it's now dead to us.
              } else {
                  // return the in progress
                  return inProgress;
              }
          }
          final Record t = new Record();
          t.start();
          // only store the new thread if we started it
          inProgress = t;
          inProgressStarted = System.currentTimeMillis();
          return inProgress;
      }
docs: /*package