protected void cancelSubreportFill() throws JRException {
    if (log.isDebugEnabled()) {
      log.debug("Fill " + filler.fillerId + ": cancelling " + subreportFiller.fillerId);
    }

    // marking the subreport filler for interruption
    subreportFiller.setInterrupted(true);

    synchronized (subreportFiller) {
      // forcing the creation of a new thread and a new subreport filler
      runner.cancel();
      runner.reset();
    }

    filler.unregisterSubfiller(subreportFiller);
  }