code: public synchronized void close()
      {
          if (reportRequest == null)
              finalReport = buildReport();
          else
          {
              finalReport = new TimingInterval(0);
              report = buildReport();
              reportRequest.countDown();
              reportRequest = null;
          }
      }
docs: closes the timer; if a request is outstanding, it furnishes the request, otherwise it populates finalReport