Fix: Java agent: close session daemon socket on error
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 22 Apr 2020 18:05:41 +0000 (14:05 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 22 Apr 2020 18:16:59 +0000 (14:16 -0400)
When catching an error, close the socket used to communicate with the
session daemon rather than leaking it, before retrying to connect.

Also, when sleep is interrupted, there is no point in printing
out the stack trace. Just retry connection immediately.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust-java-agent/java/lttng-ust-agent-common/org/lttng/ust/agent/client/LttngTcpSessiondClient.java

index d42bc9af4ee112c105ee48605b58c1c98843ba09..0e7a5c187987398139fd6e0d7d6d9bd88dbc0cb0 100644 (file)
@@ -133,11 +133,31 @@ public class LttngTcpSessiondClient implements Runnable {
                                handleSessiondCmd();
                        } catch (UnknownHostException uhe) {
                                uhe.printStackTrace();
+                               /*
+                                * Terminate agent thread.
+                                */
+                               close();
                        } catch (IOException ioe) {
+                               /*
+                                * I/O exception may have been triggered by a session daemon
+                                * closing the socket. Close our own socket and
+                                * retry connecting after a delay.
+                                */
                                try {
+                                       if (this.sessiondSock != null) {
+                                               this.sessiondSock.close();
+                                       }
                                        Thread.sleep(3000);
                                } catch (InterruptedException e) {
-                                       e.printStackTrace();
+                                       /*
+                                        * Retry immediately if sleep is interrupted.
+                                        */
+                               } catch (IOException closeioe) {
+                                       closeioe.printStackTrace();
+                                       /*
+                                        * Terminate agent thread.
+                                        */
+                                       close();
                                }
                        }
                }
This page took 0.032939 seconds and 4 git commands to generate.