Please review this change to replace the finalizer in 
`AbstractLdapNamingEnumeration` with a Cleaner.

The pieces of state required for cleanup (`LdapCtx homeCtx`, `LdapResult res`, 
and `LdapClient enumClnt`) are moved to a static inner class . From there, the 
change is fairly mechanical.

Details of note: 
1. Some operations need to change the state values (the update() method is 
probably the most interesting).
2. Subclasses need to access `homeCtx`; I added a `homeCtx()` method to read 
`homeCtx` from the superclass's `state`.

The test case is based on a copy of 
`com/sun/jndi/ldap/blits/AddTests/AddNewEntry.java`. A more minimal test case 
might be possible, but this was done for expediency.

The test only confirms that the new Cleaner use does not keep the object 
reachable. It only tests `LdapSearchEnumeration` (not `LdapNamingEnumeration` 
or `LdapBindingEnumeration`, though all are subclasses of 
`AbstractLdapNamingEnumeration`). 

Thanks.

-------------

Commit messages:
 - fix whitespace
 - Merge branch 'master' into remove-finalizers
 - Test changes to test new cleaner code
 - Rename test to LdapEnumeration
 - Create copy of AddNewEntry test to test AbstractLdapNamingEnumeration Cleaner
 - Merge branch 'master' into remove-finalizers
 - Replace AbstractLdapNamingEnumeration finalizer with Cleaner

Changes: https://git.openjdk.java.net/jdk/pull/8311/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8311&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8283660
  Stats: 259 lines in 7 files changed: 192 ins; 20 del; 47 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8311.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8311/head:pull/8311

PR: https://git.openjdk.java.net/jdk/pull/8311

Reply via email to