No need to synchronize stop and start because
they are only called from inside the bodies of RMSource.start and
RMSource.stop
if (timer != null) {
throw new IllegalStateException();
}
timer = new Timer(true);
timer.schedule(new RetryTask(),
source.getRetryInterval(),
source.getRetryInterval());