diff --git a/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java b/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java index 22fd9a9..03d0a2a 100644 --- a/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java +++ b/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java @@ -198,7 +198,7 @@ else if (m_hshutdown == true) boolean txsts = true; int retry = 0; - while (req.hasErrorStatus() == false && retry++ < reqRetry) { + retryLoop: while (req.hasErrorStatus() == false && retry++ < reqRetry) { // Debug if (Debug.EnableInfo && hasDebug()) @@ -210,6 +210,9 @@ else if (m_hshutdown == true) // Add name request case ADD_NAME: + // The server is shutting down, we can stop handling ADD_NAME + if (m_shutdown) + break retryLoop; // Check if a WINS server is configured if (hasPrimaryWINSServer()) txsts = sendAddName(req, getPrimaryWINSServer(), false); @@ -230,6 +233,9 @@ else if (m_hshutdown == true) // Refresh name request case REFRESH_NAME: + // The server is shutting down, we can stop handling REFRESH_NAME + if (m_shutdown) + break retryLoop; // Check if a WINS server is configured if (hasPrimaryWINSServer()) txsts = sendRefreshName(req, getPrimaryWINSServer(), false); @@ -724,7 +730,7 @@ public final synchronized void AddName(NetBIOSName name) throw new IOException("NetBIOS name socket not initialized"); // Create an add name request and add to the request list - NetBIOSRequest nbReq = new NetBIOSRequest(NetBIOSRequest.Type.ADD_NAME, name, getNextTransactionId()); + NetBIOSRequest nbReq = new NetBIOSRequest(NetBIOSRequest.Type.ADD_NAME, name, getNextTransactionId(), AddNameRetries); // Set the retry interval if (hasPrimaryWINSServer()) @@ -1617,6 +1623,9 @@ public void shutdownServer(boolean immediate) { Debug.println(ex); } + // Indicate that the server is closing + m_shutdown = true; + // If the shutdown is not immediate then release all of the names registered by this server if (isActive() && immediate == false) { @@ -1663,9 +1672,6 @@ public void shutdownServer(boolean immediate) { Debug.println(ex); } - // Indicate that the server is closing - m_shutdown = true; - try { // Close the server socket so that any pending receive is cancelled