ReactiveX / rxdart

The Reactive Extensions for Dart
http://reactivex.io
Apache License 2.0
3.37k stars 271 forks source link

StackOverflowError forwarding_stream.dart in _MultiControllerSink.add #707

Open davidpanic opened 1 year ago

davidpanic commented 1 year ago

This exception was reported to our sentry instance by some of our end user devices. Seems to me like it is caused by some internal rxdart logic, hence why I'm reporting it here. I have not had luck reproducing this - it's hard to do when the stacktrace doesn't even tell you where to look. I'm hoping you can help me out here, I'd like to know what conditions are needed to get this to occur.

We are using rxdart 0.27.7.

Stacktrace (Click to show) ```dart StackOverflowError: Stack Overflow File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData ?, in ... ?, in ... File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_controller.dart", in _StreamController._add File "stream_controller.dart", in _StreamController.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _BufferingStreamSubscription._add File "stream_impl.dart", in _MultiStreamController.addSync File "forwarding_stream.dart", in _MultiControllerSink.add File "zone.dart", in _RootZone.runUnaryGuarded File "stream_impl.dart", in _BufferingStreamSubscription._sendData File "stream_impl.dart", in _DelayedData.perform File "stream_impl.dart", in _PendingEvents.handleNext File "stream_impl.dart", in _PendingEvents.schedule. File "schedule_microtask.dart", in _microtaskLoop File "schedule_microtask.dart", in _startMicrotaskLoop ```
hoc081098 commented 1 year ago

I think that stack trace does not help much :(

DeToxer commented 1 year ago

I am experiencing a similar thing. I get a Stack overflow exception but my stack grace if a bit different. I am also struggling to reproduce this. What i did find out when it finally happened was that if i removed the StreamSubscriptions listening to the stream within my ReplaySubject, the Stack overflow exception went away. When i commented it in again the exception started to appear again

#0      Zone.current (dart:async/zone.dart:596:3)
#1      _runGuarded (dart:async/stream_controller.dart:817:10)
#2      _StreamController._subscribe.<anonymous closure> (dart:async/stream_controller.dart:694:7)
#3      _BufferingStreamSubscription._guardCallback (dart:async/stream_impl.dart:415:13)
#4      _StreamController._subscribe (dart:async/stream_controller.dart:693:18)
#5      _MultiStream.listen (dart:async/stream_impl.dart:1033:23)
#6      _forwardMulti.<anonymous closure>.listenToUpstream (package:rxdart/src/utils/forwarding_stream.dart:36:29)
#7      _forwardMulti.<anonymous closure> (package:rxdart/src/utils/forwarding_stream.dart:52:7)
#8      _MultiStream.listen.<anonymous closure> (dart:async/stream_impl.dart:1031:16)
#9      _runGuarded (dart:async/stream_controller.dart:815:24)
#10     _StreamController._subscribe.<anonymous closure> (dart:async/stream_controller.dart:694:7)
#11     _BufferingStreamSubscript<…>
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Stack Overflow
#0      Zone.current (dart:async/zone.dart:596:3)
#1      _runGuarded (dart:async/stream_controller.dart:817:10)
#2      _StreamController._subscribe.<anonymous closure> (dart:async/stream_controller.dart:694:7)
#3      _BufferingStreamSubscription._guardCallback (dart:async/stream_impl.dart:415:13)
#4      _StreamController._subscribe (dart:async/stream_controller.dart:693:18)
#5      _MultiStream.listen (dart:async/stream_impl.dart:1033:23)
#6      _forwardMulti.<anonymous closure>.listenToUpstream (package:rxdart/src/utils/forwarding_stream.dart:36:29)
#7      _forwardMulti.<anonymous closure> (package:rxdart/src/utils/forwarding_stream.dart:52:7)
#8      _MultiStream.listen.<anonymous closure> (dart:async/stream_impl.dart:1031:16)
#9      _runGuarded (dart:async/stream_controller.dart:815:24)
#10     _StreamController._subscribe.<anonymous closure> (dart:async/stream_controller.dart:694:7)
#11     _BufferingStreamSubscript<…>
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: 'dart:async/stream_impl.dart': Failed assertion: line 336 pos 12: '<optimized out>': is not true.
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:12)
#3      _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#4      _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#5      _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591:7)
#6      _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#7      _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: 'dart:async/stream_impl.dart': Failed assertion: line 336 pos 12: '!_inCallback': is not true.
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:336:12)
#3      _DelayedData.perform (dart:async/stream_impl.dart:515:14)
#4      _PendingEvents.handleNext (dart:async/stream_impl.dart:620:11)
#5      _PendingEvents.schedule.<anonymous closure> (dart:async/stream_impl.dart:591:7)
#6      _microtaskLoop (dart:async/schedule_microtask.dart:40:21)
#7      _startMicrotaskLoop (dart:async/schedule_microtask.dart:49:5)
hoc081098 commented 1 year ago

I think it's caused by adding to many events to the ReplaySubject, maybe a recursion :))