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