From 92c3c18914feb2e532f8c05df2a54ff334247118 Mon Sep 17 00:00:00 2001 From: Jan Henning Date: Sat, 2 Nov 2024 19:08:53 +0100 Subject: [PATCH 1/2] Wire up formerly unused AddNameRetries constant --- src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java b/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java index 22fd9a9..4c66f78 100644 --- a/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java +++ b/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java @@ -724,7 +724,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()) From 80ffdf469b10c51f941d6858da23353bf395fcf9 Mon Sep 17 00:00:00 2001 From: Jan Henning Date: Sat, 2 Nov 2024 19:33:21 +0100 Subject: [PATCH 2/2] Abort sending AddName/Refresh requests when the server is shutting down Registering three names (the same host both as workstation and server, plus the workgroup name) with five retries each at two second intervals takes 30 seconds, and with more names to announce it'd only get worse. Right now, if the server is being shut down shortly after having been started, we have to wait for all those AddName requests to be processed, which seems a bit pointless. --- .../filesys/netbios/server/NetBIOSNameServer.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java b/src/main/java/org/filesys/netbios/server/NetBIOSNameServer.java index 4c66f78..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); @@ -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