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);