changeset 13154:5318f8b41bad

8205330: InitialDirContext ctor sometimes throws NPE if the server has sent a disconnection Reviewed-by: chegar, dfuchs
author robm
date Fri, 05 Oct 2018 14:10:00 -0700
parents a2361ab40be8
children a3e85be83f58
files src/share/classes/com/sun/jndi/ldap/LdapClient.java
diffstat 1 files changed, 10 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/classes/com/sun/jndi/ldap/LdapClient.java	Fri Oct 05 14:05:02 2018 -0700
+++ b/src/share/classes/com/sun/jndi/ldap/LdapClient.java	Fri Oct 05 14:10:00 2018 -0700
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -115,8 +115,8 @@
     boolean isLdapv3;         // Used by LdapCtx
     int referenceCount = 1;   // Used by LdapCtx for check for sharing
 
-    Connection conn;  // Connection to server; has reader thread
-                      // used by LdapCtx for StartTLS
+    final Connection conn;  // Connection to server; has reader thread
+                            // used by LdapCtx for StartTLS
 
     final private PoolCallback pcb;
     final private boolean pooled;
@@ -433,19 +433,17 @@
             (new Throwable()).printStackTrace();
         }
 
-        if (referenceCount <= 0 && conn != null) {
+        if (referenceCount <= 0) {
             if (debug > 0) System.err.println("LdapClient: closed connection " + this);
             if (!pooled) {
                 // Not being pooled; continue with closing
                 conn.cleanup(reqCtls, false);
-                conn = null;
             } else {
                 // Pooled
 
                 // Is this a real close or a request to return conn to pool
                 if (hardClose) {
                     conn.cleanup(reqCtls, false);
-                    conn = null;
                     pcb.removePooledConnection(this);
                 } else {
                     pcb.releasePooledConnection(this);
@@ -462,15 +460,11 @@
             System.err.println("LdapClient: forceClose() of " + this);
         }
 
-        if (conn != null) {
-            if (debug > 0) System.err.println(
-                "LdapClient: forced close of connection " + this);
-            conn.cleanup(null, false);
-            conn = null;
-
-            if (cleanPool) {
-                pcb.removePooledConnection(this);
-            }
+        if (debug > 0) System.err.println(
+            "LdapClient: forced close of connection " + this);
+        conn.cleanup(null, false);
+        if (cleanPool) {
+            pcb.removePooledConnection(this);
         }
     }
 
@@ -567,7 +561,7 @@
      * Abandon the search operation and remove it from the message queue.
      */
     void clearSearchReply(LdapResult res, Control[] ctls) {
-        if (res != null && conn != null) {
+        if (res != null) {
 
             // Only send an LDAP abandon operation when clearing the search
             // reply from a one-level or subtree search.