From 90baaad19bc33c07418497e5bcc4748fa4c9463f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Mon, 8 Mar 2010 01:54:46 +0100 Subject: [PATCH] Allow recognizing multiple DF SHM processes by the client --- library/DFProcess-linux-SHM.cpp | 4 ++-- library/DFProcess.h | 2 +- library/DFProcessEnumerator-linux.cpp | 10 ++++++---- shmserver/shms-linux.cpp | 4 ++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/library/DFProcess-linux-SHM.cpp b/library/DFProcess-linux-SHM.cpp index 0ac7954b1..fb7226d16 100644 --- a/library/DFProcess-linux-SHM.cpp +++ b/library/DFProcess-linux-SHM.cpp @@ -180,7 +180,7 @@ void Process::Private::DF_SyncAffinity( void ) #endif } -Process::Process(vector & known_versions) +Process::Process(uint32_t PID, vector< memory_info* >& known_versions) : d(new Private()) { char exe_link_name [256]; @@ -232,7 +232,7 @@ Process::Process(vector & known_versions) /* * get the PID from DF */ - if(d->DF_GetPID(d->my_pid)) + if(d->DF_GetPID(d->my_pid) && d->my_pid == PID) { // find its binary sprintf(exe_link_name,"/proc/%d/exe", d->my_pid); diff --git a/library/DFProcess.h b/library/DFProcess.h index 8ad71e04e..91d1d773e 100644 --- a/library/DFProcess.h +++ b/library/DFProcess.h @@ -66,7 +66,7 @@ namespace DFHack Private *d; public: // this is the single most important destructor ever. ~px - Process(vector & known_versions); + Process(uint32_t PID ,vector & known_versions); ~Process(); // Set up stuff so we can read memory diff --git a/library/DFProcessEnumerator-linux.cpp b/library/DFProcessEnumerator-linux.cpp index 783bff27c..b67e83b3a 100644 --- a/library/DFProcessEnumerator-linux.cpp +++ b/library/DFProcessEnumerator-linux.cpp @@ -46,7 +46,7 @@ bool ProcessEnumerator::findProcessess() { DIR *dir_p; struct dirent *dir_entry_p; - + /* Process *p = 0; p = new Process(d->meminfo->meminfo); if(p->isIdentified()) @@ -58,7 +58,7 @@ bool ProcessEnumerator::findProcessess() delete p; p = 0; } - /* + */ // Open /proc/ directory dir_p = opendir("/proc/"); // Reading /proc/ entries @@ -69,7 +69,7 @@ bool ProcessEnumerator::findProcessess() { continue; } - Process *p2 = new NormalProcess(atoi(dir_entry_p->d_name),d->meminfo->meminfo); + Process *p2 = new Process(atoi(dir_entry_p->d_name),d->meminfo->meminfo); if(p2->isIdentified()) { d->processes.push_back(p2); @@ -79,6 +79,7 @@ bool ProcessEnumerator::findProcessess() { delete p2; } + /* Process *p3 = new WineProcess(atoi(dir_entry_p->d_name),d->meminfo->meminfo); if(p3->isIdentified()) { @@ -89,9 +90,10 @@ bool ProcessEnumerator::findProcessess() { delete p3; } + */ } closedir(dir_p); - */ + // return value depends on if we found some DF processes if(d->processes.size()) { diff --git a/shmserver/shms-linux.cpp b/shmserver/shms-linux.cpp index 63812b673..79e185203 100644 --- a/shmserver/shms-linux.cpp +++ b/shmserver/shms-linux.cpp @@ -85,8 +85,8 @@ void SHM_Init ( void ) } inited = true; - // name for the segment - key_t key = 123466; + // name for the segment, an accident waiting to happen + key_t key = SHM_KEY + OS_getPID(); // find previous segment, check if it's used by some processes. // if it isn't, kill it with fire