From fae03c518d7bc0c9b74a6df7874a97b1dd8ef952 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 27 Oct 2016 14:51:14 +0200 Subject: [PATCH] [java] replaces libbreakgen with external signal --- bin/linux/libbreakgen.so | Bin 6807 -> 0 bytes bin/linux/libbreakgen64.so | Bin 8531 -> 0 bytes bin/mac/libbreakgen.jnilib | Bin 8972 -> 0 bytes bin/mac/libbreakgen64.jnilib | Bin 9000 -> 0 bytes .../execution/runners/ProcessProxyImpl.java | 56 +++++++++++++----- .../rt/execution/application/AppMain.java | 13 +--- native/breakgen/make.sh | 1 - 7 files changed, 42 insertions(+), 28 deletions(-) delete mode 100644 bin/linux/libbreakgen.so delete mode 100644 bin/linux/libbreakgen64.so delete mode 100644 bin/mac/libbreakgen.jnilib delete mode 100644 bin/mac/libbreakgen64.jnilib delete mode 100644 native/breakgen/make.sh diff --git a/bin/linux/libbreakgen.so b/bin/linux/libbreakgen.so deleted file mode 100644 index 71a92bfb2619f5b865090759a298173897b14a05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6807 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 R1(*dm!?S~Y5+^?w{1bb}#&7@t diff --git a/bin/mac/libbreakgen.jnilib b/bin/mac/libbreakgen.jnilib deleted file mode 100644 index 00c7ad5a7bae45b7fe636fbd5b3c180e3258836c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8972 zcmeHN-)j_C6uwDTUE8fD1tF!SUF%xw`#=?t-aFG&L!Cu-wj%o6VTnnQ>-z zlL&$!rCoi=gHNUS*uS8KQuMM)R^Z7v=~$^fxQ8zhTY;aF`^>4lqo0FkK@J4V zRpo^$O6|cM*AZKVpK=)TU&?aOma^loyS^h`ejR{5|A*k40CWV`Mcr%kAbC} zotZz?Y|P|$p$aGW4_U#TVGP&i^a_;Y;Bj!@&v8f?oj5YQz&1U@b1gD{R;0|emh$V) zCM@x`5SJ&gnz{LiQAp;=>D{UjH5jvyXCS$E&VLP?_oA_1h+BBv%g{MbO3w+&UGSds z&OeLZLp*WZPOrnk=LF;5|8Z&P=vP0Uxaz!f?%X~;^GG(A;y8Q>R({t0DbH@kiE7uU zvm;_&lSV)zpb^jrXaqC@8Uc-fMnEI*A|tTW`}NB2gTxy6Mz(%%Mq3&Ijetf#BcKt`2xtT}0vZ90 zfJQ(gpb^jryyysw?Js})YW3<{;c&Pw99|G(ljy%X{l>Y4zBd}@3m3$exKJLOlr5En zu0yK=Yt8k%+S2^Y^7|7Lhv7uKQ+{N2O=$;hw96CadG2``B~ooDyOX$qFU>IYT-!|b zsW6-~U0)`V+iI!k!@y6Xz?)_pSezOWciv2Ux=sf00mximfW9&^B<_B3eU9Hk>KORl zV-I94)9Gh_nEx}NK93>S9XddtK<))I_6B7CC&V`e{kwwBo-x15fF{YgT@}VstfJV6 zLrTW4hydjxmGx6SbA&nu&^w!F4O0Zz!wNdW!$F nbza#?e8>-?Hv0GO;bTV!Rt4gD-GS$pC%d)V?&}lRT!?=FGCym( diff --git a/bin/mac/libbreakgen64.jnilib b/bin/mac/libbreakgen64.jnilib deleted file mode 100644 index 9389a53a215f74a70636584f5d1ca2d0ed36c06d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9000 zcmeHNO=u)V6n>LLH)?jbgC17=VOBTj!JQ7cEZN&6PGI6DaeuN97M7xaDl@&Q>F({H z$s`a6EGk0~0($Z0Q7@u*5kbM5f_Ml&!;ny>%-?XOb+m0gP6p~2@lCa zos4C?myuW65x%o!d`cxC#$g=T2y7hy;!CsKP4`2Cd{dHdOlAA&7HAOuynoSMuNpzaw4Ciqh+O!i}Y7q zGz!Lq^G|%1BvO2Ybv_!OzHVrqq%mXjbBkAJ8*^$6S20MYh^hsG7bO|-=8+|Ta)Be0YD`qWQW@L-GK;&-d-K>fO1!|$uLuE(E3K-c;HtD%Ko`d2>L zzWwsscRs#7N!Of`eKZyr+QdrDx18zC^)%z1+Ke_$$~0yaFbWt2i~>dhqkvJsC}0%$ z&nj@M+5f3||JQ1>pYMK38|Y?#^N;5C<}S9s_wyfjAIDh#%Wd@N39CQ*L-YO@)jOZ> zO?-oJZ{l05+gRY|N69-w9>Mvyp7{Wq>6?2K?_#?{d-SKVkm+r)w?^hm7^iYYKF5(y z!x_Upw^i)$5#R>=iK0Pg;|5fER>c}SHA>_!VVrm;_e!I^dtoDVv&e_ z7l-Q1#dB*s1iyX{cHo{hUS}TbKalGIJAn4#lRxH=45&lcyNzT(FAc`Q1N2~0=}=w-4{FssFdn(a%hi44w*Y?w DmNa`D 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