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

DNS provider does not cleanup resources properly

XMLWordPrintable

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

        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)

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

                Created:
                Updated:
                Resolved:
                Imported:
                Indexed: