RxJava 2, Flowable.doOnCancel not called when DisposableSubscriber disposed

I have a DisposableSubscriber to a Flowable. The Flowable runs for some timeUntilTimeout, but in some situations I need to kill it earlier. Right now I call .dispose() on the DisposableSubscriber but the Flowable continues to emit events. Eventually the Flowable times out and .doOnCancel() is called.

I have the following code:

private Disposable mDisposableSubscription = null;

public void start() {
    mDisposableSubscription = getFlowable()
            .timeout(timeUntilTimeout, TimeUnit.MILLISECONDS)
            .subscribeWith(new DisposableSubscriber<T>() {
                @Override
                public void onComplete() {

                }
                @Override
                public void onError(Throwable throwable) {
                    dispose();
                }
                @Override
                public void onNext(T t) {
                    // Do something
                }
            });
}

public void stop() {
    // Log "dispose"
    mDisposableSubscription.dispose();
}

private Flowable<T> getFlowable() {
    return Flowable.create(new FlowableOnSubscribe<T>() {
        public void subscribe(FlowableEmitter<T> emitter) {
            startSomeAsyncProcess();
        }
    }).doOnCancel(new Action() {
        public void run() {
            // Log "do on cancel"
            stopSomeAsyncProcess();
        }
    });
}

Calling stop() to dispose of the DisposableSubscriber before the Flowable times out means events emitted by the Flowable are no longer handled, but the Flowable continues emitting events and the async process continues running. I was under the impression that calling .dispose() downstream of the Flowable kills the Flowable by calling .doOnCancel(), but this does not appear to be the case. What am I missing?