From f1a9359bb29db4131012d15c768bded1b424df4d Mon Sep 17 00:00:00 2001 From: Eugene Vigdorchik Date: Thu, 21 Jun 2007 21:17:11 +0400 Subject: [PATCH] IDEADEV-18231 --- bin/libbreakgen.so | Bin 5309 -> 6775 bytes tools/DumpThreads/AppMain.c | 59 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 tools/DumpThreads/AppMain.c diff --git a/bin/libbreakgen.so b/bin/libbreakgen.so index 3144625a0645bf8a38a37c3615b19c96af65ed34..938db35440b74224c65124c372560cfd000f0d8a 100644 GIT binary patch literal 6775 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 f^^Xqz570joVvY1Khb7!0e;wkgTmAP~@z> +#else +#include +#include +#include +#include +#include +#include + +int isKernel26OrHigher(); +#endif + +JNIEXPORT void JNICALL Java_com_intellij_rt_execution_application_AppMain_triggerControlBreak + (JNIEnv *env, jclass clazz) { +#if defined(WIN32) + GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, 0); +#else + if (isKernel26OrHigher()) { + kill (getpid(), SIGQUIT); + } else { + int ppid = getppid(); + char buffer[1024]; + sprintf(buffer, "/proc/%d/status", ppid); + FILE * fp; + if ( (fp = fopen(buffer, "r")) != NULL ) + { + char s[124]; + char * ppid_name = "PPid:"; + while (fscanf (fp, "%s\n", s) > 0) { + if (strcmp(s, ppid_name) == 0) { + int pppid; + fscanf(fp, "%d", &pppid); + kill (pppid, SIGQUIT); + break; + } + } + + fclose (fp); + } + } +#endif +} + + +int isKernel26OrHigher() { + char buffer[1024]; + FILE * fp; + if ( (fp = fopen("/proc/version", "r")) != NULL ) + { + int major; + int minor; + fscanf(fp, "Linux version %d.%d", &major, &minor); + return major >=2 && minor >= 6; + } + + return 0; +}