mirror of
https://github.com/openjdk/jdk.git
synced 2026-03-23 06:10:01 +00:00
8169599: Several JShell tests are failing on Solaris after JDK-8145838
Partially reverting e43f670394ca Reviewed-by: rfield
This commit is contained in:
parent
d969a1a3fa
commit
4ca0a287fe
@ -24,7 +24,6 @@
|
||||
*/
|
||||
package jdk.jshell.execution;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.ObjectInput;
|
||||
@ -33,14 +32,11 @@ import java.io.OutputStream;
|
||||
import java.net.InetAddress;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.security.SecureRandom;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import com.sun.jdi.BooleanValue;
|
||||
import com.sun.jdi.ClassNotLoadedException;
|
||||
import com.sun.jdi.Field;
|
||||
@ -127,14 +123,6 @@ public class JdiDefaultExecutionControl extends JdiExecutionControl {
|
||||
VirtualMachine vm = jdii.vm();
|
||||
Process process = jdii.process();
|
||||
|
||||
OutputStream processOut = process.getOutputStream();
|
||||
SecureRandom rng = new SecureRandom();
|
||||
byte[] randomBytes = new byte[VERIFY_HASH_LEN];
|
||||
|
||||
rng.nextBytes(randomBytes);
|
||||
processOut.write(randomBytes);
|
||||
processOut.flush();
|
||||
|
||||
List<Consumer<String>> deathListeners = new ArrayList<>();
|
||||
deathListeners.add(s -> env.closeDown());
|
||||
Util.detectJdiExitEvent(vm, s -> {
|
||||
@ -143,8 +131,6 @@ public class JdiDefaultExecutionControl extends JdiExecutionControl {
|
||||
}
|
||||
});
|
||||
|
||||
ByteArrayOutputStream receivedRandomBytes = new ByteArrayOutputStream();
|
||||
|
||||
// Set-up the commands/reslts on the socket. Piggy-back snippet
|
||||
// output.
|
||||
Socket socket = listener.accept();
|
||||
@ -153,35 +139,11 @@ public class JdiDefaultExecutionControl extends JdiExecutionControl {
|
||||
Map<String, OutputStream> outputs = new HashMap<>();
|
||||
outputs.put("out", env.userOut());
|
||||
outputs.put("err", env.userErr());
|
||||
outputs.put("echo", new OutputStream() {
|
||||
@Override public void write(int b) throws IOException {
|
||||
synchronized (receivedRandomBytes) {
|
||||
receivedRandomBytes.write(b);
|
||||
receivedRandomBytes.notify();
|
||||
}
|
||||
}
|
||||
});
|
||||
Map<String, InputStream> input = new HashMap<>();
|
||||
input.put("in", env.userIn());
|
||||
return remoteInputOutput(socket.getInputStream(), out, outputs, input, (objIn, objOut) -> {
|
||||
synchronized (receivedRandomBytes) {
|
||||
while (receivedRandomBytes.size() < randomBytes.length) {
|
||||
try {
|
||||
receivedRandomBytes.wait();
|
||||
} catch (InterruptedException ex) {
|
||||
//ignore
|
||||
}
|
||||
}
|
||||
if (!Arrays.equals(receivedRandomBytes.toByteArray(), randomBytes)) {
|
||||
throw new IllegalStateException("Invalid connection!");
|
||||
}
|
||||
}
|
||||
return new JdiDefaultExecutionControl(objOut, objIn, vm, process, deathListeners);
|
||||
});
|
||||
return remoteInputOutput(socket.getInputStream(), out, outputs, input, (objIn, objOut) -> new JdiDefaultExecutionControl(objOut, objIn, vm, process, deathListeners));
|
||||
}
|
||||
}
|
||||
//where:
|
||||
private static final int VERIFY_HASH_LEN = 20;
|
||||
|
||||
/**
|
||||
* Create an instance.
|
||||
|
||||
@ -24,7 +24,6 @@
|
||||
*/
|
||||
package jdk.jshell.execution;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.PrintStream;
|
||||
@ -58,7 +57,6 @@ public class RemoteExecutionControl extends DirectExecutionControl implements Ex
|
||||
* @throws Exception any unexpected exception
|
||||
*/
|
||||
public static void main(String[] args) throws Exception {
|
||||
InputStream fd0 = System.in;
|
||||
String loopBack = null;
|
||||
Socket socket = new Socket(loopBack, Integer.parseInt(args[0]));
|
||||
InputStream inStream = socket.getInputStream();
|
||||
@ -66,25 +64,6 @@ public class RemoteExecutionControl extends DirectExecutionControl implements Ex
|
||||
Map<String, Consumer<OutputStream>> outputs = new HashMap<>();
|
||||
outputs.put("out", st -> System.setOut(new PrintStream(st, true)));
|
||||
outputs.put("err", st -> System.setErr(new PrintStream(st, true)));
|
||||
outputs.put("echo", st -> {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
int read;
|
||||
|
||||
while ((read = fd0.read()) != (-1)) {
|
||||
st.write(read);
|
||||
}
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
try {
|
||||
st.close();
|
||||
} catch (IOException ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
});
|
||||
Map<String, Consumer<InputStream>> input = new HashMap<>();
|
||||
input.put("in", st -> System.setIn(st));
|
||||
forwardExecutionControlAndIO(new RemoteExecutionControl(), inStream, outStream, outputs, input);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user