[425044] Runtime disconnected error while running tests
All the streams are closed in case of accept fails. Otherwise, in case of accept succeeded, a client and a server are responsible to close their connections accordingly.
Signed-off-by: vrubezhny <vrubezhny@exadel.com>
diff --git a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/PipedTransportService.java b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/PipedTransportService.java
index 896ce82..d044991 100644
--- a/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/PipedTransportService.java
+++ b/bundles/org.eclipse.wst.jsdt.debug.rhino.debugger/src/org/eclipse/wst/jsdt/debug/internal/rhino/transport/PipedTransportService.java
@@ -108,36 +108,40 @@
PipedOutputStream clientos = new PipedOutputStream();
PipedOutputStream serveros = new PipedOutputStream();
PipedInputStream clientis = new PipedInputStream();
+ serveris.connect(clientos);
+ serveros.connect(clientis);
+
+ PipedConnection clientConnection = new PipedConnection(clientis, clientos);
+ PipedConnection serverConnection = new PipedConnection(serveris, serveros);
- try {
- serveris.connect(clientos);
- serveros.connect(clientis);
-
- listeners.put(key, new PipedConnection(clientis, clientos));
- listeners.notifyAll();
- long startTime = System.currentTimeMillis();
- while (true) {
- try {
- listeners.wait(timeout);
- } catch (InterruptedException e) {
- throw new IOException("accept failed: interrupted"); //$NON-NLS-1$
- }
- if (!listeners.containsKey(key))
- throw new IOException("accept failed: stopped listening"); //$NON-NLS-1$
-
- if (listeners.get(key) != null) {
- if (System.currentTimeMillis() - startTime > timeout) {
- listeners.put(key, null);
- throw new IOException("accept failed: timed out"); //$NON-NLS-1$
- }
- continue;
- }
- return new PipedConnection(serveris, serveros);
+ listeners.put(key, clientConnection);
+ listeners.notifyAll();
+ long startTime = System.currentTimeMillis();
+ while (true) {
+ try {
+ listeners.wait(timeout);
+ } catch (InterruptedException e) {
+ clientConnection.close(); // Close unused client connection (and its streams);
+ serverConnection.close(); // Close unused server connection (and its streams);
+ throw new IOException("accept failed: interrupted"); //$NON-NLS-1$
}
- }
- finally {
- serveris.close();
- serveros.close();
+ if (!listeners.containsKey(key)) {
+ clientConnection.close(); // Close unused client connection (and its streams);
+ serverConnection.close(); // Close unused server connection (and its streams);
+ throw new IOException("accept failed: stopped listening"); //$NON-NLS-1$
+ }
+
+ if (listeners.get(key) != null) {
+ if (System.currentTimeMillis() - startTime > timeout) {
+ listeners.put(key, null);
+ clientConnection.close(); // Close unused client connection (and its streams);
+ serverConnection.close(); // Close unused server connection (and its streams);
+ throw new IOException("accept failed: timed out"); //$NON-NLS-1$
+ }
+ continue;
+ }
+ return serverConnection; // From this point both, the server and the client,
+ // are responsible to close their connections
}
}
}