From a3b5c94d655279749db6d9a95ec4924292d9f61b Mon Sep 17 00:00:00 2001 From: Nagy Attila Gabor Date: Sat, 28 Mar 2020 19:12:37 +0100 Subject: [PATCH 1/2] Remove singleton instances once the client is finished This can prevent unwanted behavior to happen because of missing initialization --- .../risev2g/evcc/transportLayer/TCPClient.java | 5 +++++ .../risev2g/evcc/transportLayer/TLSClient.java | 5 +++++ .../risev2g/evcc/transportLayer/UDPClient.java | 14 +++++++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java index 2fe1de1..26826ce 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java @@ -139,6 +139,7 @@ public class TCPClient extends StatefulTransportLayerClient { getInStream().close(); getOutStream().close(); getTcpSocketToServer().close(); + releaseInstance(); Thread.currentThread().interrupt(); } catch (IOException e) { getLogger().error("Error occurred while trying to close TCP socket to server", e); @@ -148,6 +149,10 @@ public class TCPClient extends StatefulTransportLayerClient { } } + private static void releaseInstance() { + uniqueTCPClientInstance = null; + } + public Socket getTcpSocketToServer() { return tcpSocketToServer; } diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java index 605bf0c..08831dc 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java @@ -211,6 +211,7 @@ public class TLSClient extends StatefulTransportLayerClient { getInStream().close(); getOutStream().close(); getTlsSocketToServer().close(); + releaseInstance(); Thread.currentThread().interrupt(); } catch (IOException e) { getLogger().error("Error occurred while trying to close TCP socket to server", e); @@ -220,6 +221,10 @@ public class TLSClient extends StatefulTransportLayerClient { } } + private static void releaseInstance() { + uniqueTLSClientInstance = null; + } + public SSLSocket getTlsSocketToServer() { return tlsSocketToServer; diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java index cf5b3ef..0c54075 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java @@ -51,7 +51,7 @@ public class UDPClient { * access the instance variable -> thread safe. */ private Logger logger = LogManager.getLogger(this.getClass().getSimpleName()); - private static final UDPClient uniqueUDPClientInstance = new UDPClient(); + private static UDPClient uniqueUDPClientInstance = new UDPClient(); private int multicastSocketPort; private Inet6Address multicastAddress; private MulticastSocket socketToUDPServer; @@ -106,6 +106,13 @@ public class UDPClient { public static UDPClient getInstance() { + if (uniqueUDPClientInstance == null) { + synchronized (UDPClient.class) { + if (uniqueUDPClientInstance == null) { + uniqueUDPClientInstance = new UDPClient(); + } + } + } return uniqueUDPClientInstance; } @@ -144,6 +151,11 @@ public class UDPClient { public void stop() { getSocketToUDPServer().close(); getLogger().debug("UDP client stopped"); + releaseInstance(); + } + + private static void releaseInstance() { + uniqueUDPClientInstance = null; } From 79917ab517ef9b60c094efd3fc12cc38cf6462d3 Mon Sep 17 00:00:00 2001 From: Nagy Attila Gabor Date: Sun, 3 May 2020 12:31:33 +0200 Subject: [PATCH 2/2] Inlined releaseInstance methods --- .../risev2g/evcc/transportLayer/TCPClient.java | 6 +----- .../risev2g/evcc/transportLayer/TLSClient.java | 6 +----- .../risev2g/evcc/transportLayer/UDPClient.java | 12 ++---------- 3 files changed, 4 insertions(+), 20 deletions(-) diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java index 26826ce..e74889a 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TCPClient.java @@ -139,7 +139,7 @@ public class TCPClient extends StatefulTransportLayerClient { getInStream().close(); getOutStream().close(); getTcpSocketToServer().close(); - releaseInstance(); + uniqueTCPClientInstance = null; Thread.currentThread().interrupt(); } catch (IOException e) { getLogger().error("Error occurred while trying to close TCP socket to server", e); @@ -149,10 +149,6 @@ public class TCPClient extends StatefulTransportLayerClient { } } - private static void releaseInstance() { - uniqueTCPClientInstance = null; - } - public Socket getTcpSocketToServer() { return tcpSocketToServer; } diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java index 08831dc..b04ad0b 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/TLSClient.java @@ -211,7 +211,7 @@ public class TLSClient extends StatefulTransportLayerClient { getInStream().close(); getOutStream().close(); getTlsSocketToServer().close(); - releaseInstance(); + uniqueTLSClientInstance = null; Thread.currentThread().interrupt(); } catch (IOException e) { getLogger().error("Error occurred while trying to close TCP socket to server", e); @@ -221,10 +221,6 @@ public class TLSClient extends StatefulTransportLayerClient { } } - private static void releaseInstance() { - uniqueTLSClientInstance = null; - } - public SSLSocket getTlsSocketToServer() { return tlsSocketToServer; diff --git a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java index 0c54075..319c732 100644 --- a/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java +++ b/RISE-V2G-EVCC/src/main/java/com/v2gclarity/risev2g/evcc/transportLayer/UDPClient.java @@ -105,13 +105,9 @@ public class UDPClient { } - public static UDPClient getInstance() { + public static synchronized UDPClient getInstance() { if (uniqueUDPClientInstance == null) { - synchronized (UDPClient.class) { - if (uniqueUDPClientInstance == null) { - uniqueUDPClientInstance = new UDPClient(); - } - } + uniqueUDPClientInstance = new UDPClient(); } return uniqueUDPClientInstance; } @@ -151,10 +147,6 @@ public class UDPClient { public void stop() { getSocketToUDPServer().close(); getLogger().debug("UDP client stopped"); - releaseInstance(); - } - - private static void releaseInstance() { uniqueUDPClientInstance = null; }