Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-5053708

DNS provider does not cleanup resources properly

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • P4
    • 7
    • 5.0, 5.0u4
    • core-libs
    • b12
    • generic, sparc
    • generic, solaris_10

    Backports

      Description

        The DNS provider context does not cleanup the network resources
        upon a close.

        This problem was posted on the JNDI forum at java.sun.com

        import java.net.*;
        import javax.naming.*;
        import javax.naming.directory.*;
        import java.util.*;

        public class SocketLeak {
            public static void main(String argv[]) throws Exception {
                Map map = new HashMap();
                Hashtable env= new Hashtable();

                env.put(Context.INITIAL_CONTEXT_FACTORY,
                        "com.sun.jndi.dns.DnsContextFactory");
                env.put(Context.PROVIDER_URL,"dns://xxx.xxx.xxx.xxx");
                int count = 0;

                while(true) {
                    DirContext ctx = new InitialDirContext(env);
                    ctx.close();
                    ctx = null;
                    count++;
                    System.out.println(count);
                }
            }
        }


        The above program loops for around 1020 times on solaris 8, after which it runs
        out of file descriptors, and fails with an exception below.

        Exception in thread "main" javax.naming.ConfigurationException. Root exception is java.net.SocketException: Too many open files
                at java.net.PlainDatagramSocketImpl.datagramSocketCreate(Native Method)
                at java.net.PlainDatagramSocketImpl.create(PlainDatagramSocketImpl.java:53)
                at java.net.DatagramSocket.createImpl(DatagramSocket.java:278)
                at java.net.DatagramSocket.<init>(DatagramSocket.java:127)
                at com.sun.jndi.dns.DnsClient.<init>(DnsClient.java:81)
                at com.sun.jndi.dns.Resolver.<init>(Resolver.java:33)
                at com.sun.jndi.dns.DnsContext.<init>(DnsContext.java:78)
                at com.sun.jndi.dns.DnsContextFactory.UrlToContext(DnsContextFactory.java:73)
                at com.sun.jndi.dns.DnsContextFactory.getInitialContext(DnsContextFactory.java:41)
                at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:662)
                at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
                at javax.naming.InitialContext.init(InitialContext.java:219)
                at javax.naming.InitialContext.<init>(InitialContext.java:195)
                at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.java:80)
                at SocketLeak.main(SocketLeak.java:17)

        Attachments

          Issue Links

            Activity

              People

                jhangalsunw Jayalaxmi Hangal (Inactive)
                jhangalsunw Jayalaxmi Hangal (Inactive)
                Votes:
                0 Vote for this issue
                Watchers:
                0 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: