Bug 41026 - NPE if quickly cancel debug launch
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketListeningConnectorImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketListeningConnectorImpl.java
index 2f084f3..2a432f1 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketListeningConnectorImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketListeningConnectorImpl.java
@@ -121,7 +121,11 @@
public VirtualMachine accept(Map connectionArgs) throws IOException, IllegalConnectorArgumentsException {
((SocketTransportImpl)fTransport).setAcceptTimeout(fTimeout);
((SocketTransportImpl)fTransport).accept();
- return establishedConnection();
+ if (fTransport.isOpen()) {
+ return establishedConnection();
+ } else {
+ return null;
+ }
}
/**
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
index c2602e3..3185a0f 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
@@ -30,7 +30,7 @@
private static final byte[] handshakeBytes = "JDWP-Handshake".getBytes(); //$NON-NLS-1$
/** Socket on which VM is connected. */
private Socket fSocket = null;
- /** ServerSocker used to listen to connecting VMs. */
+ /** ServerSocket used to listen to connecting VMs. */
private ServerSocket fServerSocket = null;
/**
@@ -81,6 +81,9 @@
* Accepts connections initiated by target VMs.
*/
public void accept() throws IOException {
+ if (fServerSocket == null) {
+ return;
+ }
fSocket =fServerSocket.accept();
PerformHandshake();
}
@@ -89,6 +92,9 @@
* Sets timeout on accept.
*/
public void setAcceptTimeout(int timeout) throws SocketException {
+ if (fServerSocket == null) {
+ return;
+ }
fServerSocket.setSoTimeout(timeout);
}
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index fc104ec..7125951 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
@@ -254,9 +254,11 @@
}
VirtualMachine vm= runnable.getVirtualMachine();
- JDIDebugModel.newDebugTarget(launch, vm, renderDebugTarget(config.getClassToLaunch(), port), process, true, false);
- subMonitor.worked(1);
- subMonitor.done();
+ if (vm != null) {
+ JDIDebugModel.newDebugTarget(launch, vm, renderDebugTarget(config.getClassToLaunch(), port), process, true, false);
+ subMonitor.worked(1);
+ subMonitor.done();
+ }
return;
} catch (InterruptedIOException e) {
checkErrorMessage(process);