summaryrefslogtreecommitdiffstats
path: root/lib/Plugins/CCpp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Plugins/CCpp.cpp')
-rw-r--r--lib/Plugins/CCpp.cpp21
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)