neuecc / UniRx

Reactive Extensions for Unity
MIT License
7.08k stars 892 forks source link

Fix infinite recursive in ObserveOn #438

Open TORISOUP opened 4 years ago

TORISOUP commented 4 years ago

ObserveOn(Scheduler.Immediate) causes an infinite loop.

// Sample

var subject = new Subject<int>();

var observable = subject.ObserveOn(Scheduler.Immediate);

observable
    .Where(x => x == 0)
    .Subscribe(_ => subject.OnNext(1));

subject.OnNext(0); // !

subject.OnCompleted();

ObserveOn has LinkedListNode<SchedulableAction>, and push SchedulableAction to it. But ProcessNext() take only first value. Therefore, the same SchedulableAction is executed many times, and never stop.