MGR: Use code like get_client_mutex() to determine if client is running; KillClient() uses process name if we don't have pid.

svn path=/trunk/boinc/; revision=18316
This commit is contained in:
Charlie Fenton 2009-06-06 00:26:44 +00:00
parent 0bf6ddb2fd
commit 5dc3068df8
3 changed files with 517 additions and 683 deletions

View File

@ -5137,3 +5137,12 @@ David 5 June 2009
sched/ sched/
sched_plan.cpp,h sched_plan.cpp,h
Charlie 5 June 2009
- MGR: Use code like get_client_mutex() to determine if client is running.
New CBOINCClientManager::KillClient() uses process name to kill client
if we don't have a pid (Mac, Linux) or process HANDLE (Windows).
NOTE: Windows implmentation not yet finished.
clientgui/
BOINCClientManager.cpp, .h

File diff suppressed because it is too large Load Diff

View File

@ -1,71 +1,60 @@
// This file is part of BOINC. // This file is part of BOINC.
// http://boinc.berkeley.edu // http://boinc.berkeley.edu
// Copyright (C) 2008 University of California // Copyright (C) 2008 University of California
// //
// BOINC is free software; you can redistribute it and/or modify it // BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License // under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation, // as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version. // either version 3 of the License, or (at your option) any later version.
// //
// BOINC is distributed in the hope that it will be useful, // BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of // but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details. // See the GNU Lesser General Public License for more details.
// //
// You should have received a copy of the GNU Lesser General Public License // You should have received a copy of the GNU Lesser General Public License
// along with BOINC. If not, see <http://www.gnu.org/licenses/>. // along with BOINC. If not, see <http://www.gnu.org/licenses/>.
#ifndef _BOINCCLIENTMANAGER_H_ #ifndef _BOINCCLIENTMANAGER_H_
#define _BOINCCLIENTMANAGER_H_ #define _BOINCCLIENTMANAGER_H_
#if defined(__GNUG__) && !defined(__APPLE__) #if defined(__GNUG__) && !defined(__APPLE__)
#pragma interface "BOINCClientManager.cpp" #pragma interface "BOINCClientManager.cpp"
#endif #endif
class CBOINCClientManager : public wxObject class CBOINCClientManager : public wxObject
{ {
public: public:
CBOINCClientManager(); CBOINCClientManager();
~CBOINCClientManager(); ~CBOINCClientManager();
bool AutoRestart(); bool AutoRestart();
bool IsSystemBooting(); bool IsSystemBooting();
int IsBOINCConfiguredAsDaemon(); int IsBOINCConfiguredAsDaemon();
void DisableBOINCStartedByManager() { m_bBOINCStartedByManager = false; }; void DisableBOINCStartedByManager() { m_bBOINCStartedByManager = false; };
void EnableBOINCStartedByManager() { m_bBOINCStartedByManager = true; }; void EnableBOINCStartedByManager() { m_bBOINCStartedByManager = true; };
bool WasBOINCStartedByManager() { return m_bBOINCStartedByManager; }; bool WasBOINCStartedByManager() { return m_bBOINCStartedByManager; };
bool IsBOINCCoreRunning(); bool IsBOINCCoreRunning();
bool StartupBOINCCore(); bool StartupBOINCCore();
void ShutdownBOINCCore(); void ShutdownBOINCCore();
protected: protected:
bool m_bBOINCStartedByManager;
bool m_bBOINCStartedByManager; int m_lBOINCCoreProcessId;
int m_lBOINCCoreProcessId;
#ifdef __WXMSW__
#ifdef __WXMSW__ void KillClient(HANDLE processHandle);
PPERF_OBJECT_TYPE FirstObject( PPERF_DATA_BLOCK PerfData ); HANDLE m_hBOINCCoreProcess;
PPERF_OBJECT_TYPE NextObject( PPERF_OBJECT_TYPE PerfObj ); #else
PPERF_INSTANCE_DEFINITION FirstInstance( PPERF_OBJECT_TYPE PerfObj ); void KillClient(pid_t thePID);
PPERF_INSTANCE_DEFINITION NextInstance( PPERF_INSTANCE_DEFINITION PerfInst ); #endif
PPERF_COUNTER_DEFINITION FirstCounter( PPERF_OBJECT_TYPE PerfObj );
PPERF_COUNTER_DEFINITION NextCounter( PPERF_COUNTER_DEFINITION PerfCntr ); };
PPERF_COUNTER_BLOCK CounterBlock(PPERF_INSTANCE_DEFINITION PerfInst);
DWORD GetProcessID(LPCTSTR pProcessName);
#endif
bool ProcessExists(HANDLE* thePID);
HANDLE m_hBOINCCoreProcess;
#else
bool ProcessExists(pid_t* thePID);
#endif
};
#endif