diff options
| author | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-04-01 14:37:00 +0200 |
|---|---|---|
| committer | Zdenek Prikryl <zdeny@dhcp-lab-218.englab.brq.redhat.com> | 2009-04-01 14:37:00 +0200 |
| commit | fd65c793997f3fcc1ee01ad4b0991afee1cc4d19 (patch) | |
| tree | 3ebe5b3b95c4a7d16e97c8c00feb3e3590a711e3 /lib/Plugins/CCpp.cpp | |
| parent | 2d1c2342637bb6d761cb115ac97c4a7bc51141ab (diff) | |
| download | abrt-fd65c793997f3fcc1ee01ad4b0991afee1cc4d19.tar.gz abrt-fd65c793997f3fcc1ee01ad4b0991afee1cc4d19.tar.xz abrt-fd65c793997f3fcc1ee01ad4b0991afee1cc4d19.zip | |
added killing of debuginfo-install if CCpp is unloaded
Diffstat (limited to 'lib/Plugins/CCpp.cpp')
| -rw-r--r-- | lib/Plugins/CCpp.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/lib/Plugins/CCpp.cpp b/lib/Plugins/CCpp.cpp index e0f3714..38f1a2a 100644 --- a/lib/Plugins/CCpp.cpp +++ b/lib/Plugins/CCpp.cpp @@ -38,11 +38,23 @@ #define CORE_PATTERN "|"CCPP_HOOK_PATH" %p %s %u" CAnalyzerCCpp::CAnalyzerCCpp() : - m_bMemoryMap(false) + m_bMemoryMap(false), + m_Pid(0) {} +CAnalyzerCCpp::~CAnalyzerCCpp() +{ + if (m_Pid) + { + kill(m_Pid, SIGTERM); + wait(NULL); + } +} + void CAnalyzerCCpp::InstallDebugInfos(const std::string& pPackage) { + std::string packageName = pPackage.substr(0, pPackage.rfind("-", pPackage.rfind("-")-1)); + std::cerr << packageName << std::endl; char buff[1024]; int pipein[2], pipeout[2]; struct timeval delay; @@ -56,6 +68,7 @@ void CAnalyzerCCpp::InstallDebugInfos(const std::string& pPackage) fcntl(pipeout[1], F_SETFD, FD_CLOEXEC); child = fork(); + m_Pid = child; if (child < 0) { throw std::string("CAnalyzerCCpp::RunGdb(): fork failed."); @@ -103,7 +116,8 @@ void CAnalyzerCCpp::InstallDebugInfos(const std::string& pPackage) { buff[r] = '\0'; std::cerr << buff; - if (strstr(buff, "already installed and latest version") != NULL) + if (strstr(buff, packageName.c_str()) != NULL && + strstr(buff, "already installed and latest version") != NULL) { break; } @@ -137,6 +151,7 @@ void CAnalyzerCCpp::InstallDebugInfos(const std::string& pPackage) close(pipeout[0]); wait(NULL); + m_Pid = 0; } void CAnalyzerCCpp::GetBacktrace(const std::string& pDebugDumpDir, std::string& pBacktrace) @@ -222,6 +237,7 @@ void CAnalyzerCCpp::RunGdb(const std::string& pScript, const std::string pUID, s fcntl(pipeout[1], F_SETFD, FD_CLOEXEC); child = fork(); + m_Pid = child; if (child == -1) { throw std::string("CAnalyzerCCpp::RunGdb(): fork failed."); @@ -274,6 +290,7 @@ void CAnalyzerCCpp::RunGdb(const std::string& pScript, const std::string pUID, s } close(pipeout[0]); wait(NULL); + m_Pid = 0; } std::string CAnalyzerCCpp::GetLocalUUID(const std::string& pDebugDumpDir) |
