Skip to content

Conversation

@bchristi-git
Copy link
Owner

3 finalizers in RMI code can be removed, as they do not perform meaningful cleanup.

jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext

RegistryContext.finalize() just calls close(). The close() method does not perform any cleanup per se, but rather "helps the garbage collector" by setting environment and registry to null.

jdk.naming.rmi/share/classes/com/sun/jndi/rmi/registry/RegistryContext.BindingEnumeration

BindingEnumeration.finalize() simply calls close() on the ctx field, itself a RegistryContext (and close() just "helps the GC.")

src/java.rmi/share/classes/sun/rmi/log/LogInputStream

LogInputStream tracks its length with an int field, length. If length ever becomes == 0, LogInputStream's methods will return without doing anything.

The finalizer calls close(), which just sets length = 0.

By the time a LogInputStream becomes unreachable and is finalized, it's a moot point whether length == 0, as no more methods can be called.
If anything, this finalizer could cause a bug. If a LogInputStream were to became unreachable while a method were still running, the finalizer could set the length to 0 while method code is still running and expecting a length != 0.
It's possible that there is a very long standing bug that close() should be calling in.close(), in which case this evaluation will need to be revisited.

@bchristi-git bchristi-git self-assigned this Jan 31, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants