diff --git a/bin/linux/libbreakgen.so b/bin/linux/libbreakgen.so deleted file mode 100644 index 71a92bfb2619..000000000000 Binary files a/bin/linux/libbreakgen.so and /dev/null differ diff --git a/bin/linux/libbreakgen64.so b/bin/linux/libbreakgen64.so deleted file mode 100644 index ba9c5900404e..000000000000 Binary files a/bin/linux/libbreakgen64.so and /dev/null differ diff --git a/bin/mac/libbreakgen.jnilib b/bin/mac/libbreakgen.jnilib deleted file mode 100644 index 00c7ad5a7bae..000000000000 Binary files a/bin/mac/libbreakgen.jnilib and /dev/null differ diff --git a/bin/mac/libbreakgen64.jnilib b/bin/mac/libbreakgen64.jnilib deleted file mode 100644 index 9389a53a215f..000000000000 Binary files a/bin/mac/libbreakgen64.jnilib and /dev/null differ diff --git a/java/execution/impl/src/com/intellij/execution/runners/ProcessProxyImpl.java b/java/execution/impl/src/com/intellij/execution/runners/ProcessProxyImpl.java index 6a21454a5cea..5d391fee79fd 100644 --- a/java/execution/impl/src/com/intellij/execution/runners/ProcessProxyImpl.java +++ b/java/execution/impl/src/com/intellij/execution/runners/ProcessProxyImpl.java @@ -15,7 +15,9 @@ */ package com.intellij.execution.runners; +import com.intellij.execution.process.BaseOSProcessHandler; import com.intellij.execution.process.ProcessHandler; +import com.intellij.execution.process.UnixProcessManager; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; @@ -41,8 +43,9 @@ class ProcessProxyImpl implements ProcessProxy { private final ServerSocket mySocket; - private final Object myWriterLock = new Object(); + private final Object myLock = new Object(); private Writer myWriter; + private int myPid; public ProcessProxyImpl() throws IOException { mySocket = new ServerSocket(); @@ -60,20 +63,26 @@ class ProcessProxyImpl implements ProcessProxy { processHandler.putUserData(KEY, this); try { - //noinspection SocketOpenedButNotSafelyClosed - OutputStreamWriter writer = new OutputStreamWriter(mySocket.accept().getOutputStream(), "US-ASCII"); - synchronized (myWriterLock) { + @SuppressWarnings("SocketOpenedButNotSafelyClosed") OutputStreamWriter writer = new OutputStreamWriter(mySocket.accept().getOutputStream(), "US-ASCII"); + + int pid = -1; + if (SystemInfo.isUnix && processHandler instanceof BaseOSProcessHandler) { + pid = UnixProcessManager.getProcessPid(((BaseOSProcessHandler)processHandler).getProcess()); + } + + synchronized (myLock) { myWriter = writer; + myPid = pid; } } - catch (IOException e) { + catch (Exception e) { Logger.getInstance(ProcessProxy.class).warn(e); } } private void writeLine(String s) { try { - synchronized (myWriterLock) { + synchronized (myLock) { myWriter.write(s); myWriter.write('\n'); myWriter.flush(); @@ -86,26 +95,41 @@ class ProcessProxyImpl implements ProcessProxy { @Override public boolean canSendBreak() { - synchronized (myWriterLock) { - if (myWriter == null) return false; + if (SystemInfo.isWindows) { + synchronized (myLock) { + if (myWriter == null) return false; + } + return new File(PathManager.getBinPath(), "breakgen.dll").exists(); } - String libName = null; - if (SystemInfo.isWindows) libName = "breakgen.dll"; - else if (SystemInfo.isMac) libName = "libbreakgen.jnilib"; - else if (SystemInfo.isLinux) libName = "libbreakgen.so"; - return libName != null && new File(PathManager.getBinPath(), libName).exists(); + + if (SystemInfo.isUnix) { + synchronized (myLock) { + return myPid > 0; + } + } + + return false; } @Override public boolean canSendStop() { - synchronized (myWriterLock) { + synchronized (myLock) { return myWriter != null; } } @Override public void sendBreak() { - writeLine("BREAK"); + if (SystemInfo.isWindows) { + writeLine("BREAK"); + } + else if (SystemInfo.isUnix) { + int pid; + synchronized (myLock) { + pid = myPid; + } + UnixProcessManager.sendSignal(pid, 3); // SIGQUIT + } } @Override @@ -116,7 +140,7 @@ class ProcessProxyImpl implements ProcessProxy { @Override public void destroy() { try { - synchronized (myWriterLock) { + synchronized (myLock) { if (myWriter != null) { myWriter.close(); } diff --git a/java/java-runtime/src/com/intellij/rt/execution/application/AppMain.java b/java/java-runtime/src/com/intellij/rt/execution/application/AppMain.java index 4cc2ef0b91f5..dc4a0e91835b 100644 --- a/java/java-runtime/src/com/intellij/rt/execution/application/AppMain.java +++ b/java/java-runtime/src/com/intellij/rt/execution/application/AppMain.java @@ -40,19 +40,10 @@ public class AppMain { static { boolean libLoaded = false; try { - String libName = null; String osName = System.getProperty("os.name").toLowerCase(Locale.US); - String arch = System.getProperty("os.arch").toLowerCase(Locale.US); if (osName.startsWith("windows")) { - libName = (arch.equals("amd64") ? "breakgen64.dll" : "breakgen.dll"); - } - else if (osName.startsWith("linux")) { - libName = (arch.equals("amd64") ? "libbreakgen64.so" : "libbreakgen.so"); - } - else if (osName.startsWith("mac")) { - libName = (arch.endsWith("64") ? "libbreakgen64.jnilib" : "libbreakgen.jnilib"); - } - if (libName != null) { + String arch = System.getProperty("os.arch").toLowerCase(Locale.US); + String libName = arch.equals("amd64") ? "breakgen64.dll" : "breakgen.dll"; File libFile = new File(System.getProperty(PROPERTY_BIN_PATH), libName); if (libFile.isFile()) { System.load(libFile.getAbsolutePath()); diff --git a/native/breakgen/make.sh b/native/breakgen/make.sh deleted file mode 100644 index 5ef8c5b7cd56..000000000000 --- a/native/breakgen/make.sh +++ /dev/null @@ -1 +0,0 @@ -gcc -I/opt/jdk1.6.0_16_x64/include/ -I/opt/jdk1.6.0_16_x64/include/linux/ AppMain.c -shared -fPIC -o libbreakgen64.so