-
Notifications
You must be signed in to change notification settings - Fork 62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Issue #296 Dispose NodeConnector intake in onDestroy #297
base: 1.x
Are you sure you want to change the base?
Issue #296 Dispose NodeConnector intake in onDestroy #297
Conversation
@@ -31,7 +33,7 @@ class NodeConnector<Input, Output>( | |||
} | |||
|
|||
override fun onCreate(lifecycle: Lifecycle) { | |||
lifecycle.subscribe(onCreate = { flushOutputCache() }) | |||
lifecycle.subscribe(onCreate = { flushOutputCache() }, onDestroy = { intakeDisposable?.dispose() }) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Possibly we should log an error, or raise an exception if input/output is invoked after onDestroy
is called, rather than just swallowing silently?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You can't skip onCreate
callback. androidx.lifecycle.LifecycleRegistry.moveToState
forbids going from initialised state to destroyed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
sorry, I wasn't talking about lifecycles here @CherryPerry. I meant if someone called input.accept
/output.accept
after onDestroy for the node was called.
In this case the output event would be ignored, but the input event would not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IMHO do not see it as a problem that we should take care of, swallowing is OK for me.
@@ -55,7 +57,7 @@ class NodeConnector<Input, Output>( | |||
} | |||
|
|||
private fun switchToExhaust() { | |||
intake.subscribe { exhaust.accept(it) } | |||
intakeDisposable = intake.subscribe { exhaust.accept(it) } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
intake.subscribe(exhaust)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
makes sense
Honestly do not think it is an error. Both source and subscriber are managed by us, they should be GCed together as soon as everybody unsubscribed from node. But not against PR, makes sense. |
@CherryPerry the garbage collector is not deterministic, so if we don't unsubscribe in a deterministic manner, users may get unexpected behaviours (depending on whether they are still sending events after a node is destroyed. |
Description
Closes #296
Check list
CHANGELOG.md
if required.