Changes: refactor boosterkiller to monitorbooster

pull/1/head
Alexey Shilov 15 years ago
parent 0195e8b9b3
commit ed132aee32

@ -4,8 +4,8 @@ include(${QT_USE_FILE})
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_HOME_DIRECTORY}/src/common)
# Set sources
set(SRC appdata.cpp booster.cpp boosterfactory.cpp boosterkiller.cpp connection.cpp daemon.cpp mbooster.cpp logger.cpp main.cpp qtbooster.cpp wrtbooster.cpp)
set(MOC_HDRS boosterkiller.h)
set(SRC appdata.cpp booster.cpp boosterfactory.cpp monitorbooster.cpp connection.cpp daemon.cpp mbooster.cpp logger.cpp main.cpp qtbooster.cpp wrtbooster.cpp)
set(MOC_HDRS monitorbooster.h)
qt4_wrap_cpp(MOC_SRC ${MOC_HDRS})
# Find libdl

@ -68,7 +68,7 @@ public:
*
* \return true on success
*/
bool readCommand();
virtual bool readCommand();
/*!
* \brief Initialize and preload stuff

@ -22,6 +22,7 @@
#include "mbooster.h"
#include "qtbooster.h"
#include "wrtbooster.h"
#include "monitorbooster.h"
BoosterFactory::BoosterFactory()
{}
@ -40,6 +41,10 @@ Booster * BoosterFactory::create(char type)
{
return new WRTBooster();
}
else if (type == MonitorBooster::type())
{
return new MonitorBooster();
}
else
{
return NULL;
@ -60,6 +65,10 @@ void BoosterFactory::setProcessIdToBooster(char type, pid_t pid)
{
WRTBooster::setProcessId(pid);
}
else if (type == MonitorBooster::type())
{
MonitorBooster::setProcessId(pid);
}
}
char BoosterFactory::getBoosterTypeForPid(pid_t pid)
@ -76,6 +85,10 @@ char BoosterFactory::getBoosterTypeForPid(pid_t pid)
{
return WRTBooster::type();
}
else if (pid == MonitorBooster::processId())
{
return MonitorBooster::type();
}
else
{
return 0;
@ -98,6 +111,7 @@ pid_t BoosterFactory::getBoosterPidForType(char type)
}
else
{
// not used for MonitorBooster
return 0;
}
}

@ -24,8 +24,8 @@
#include "mbooster.h"
#include "qtbooster.h"
#include "wrtbooster.h"
#include "monitorbooster.h"
#include "boosterfactory.h"
#include "boosterkiller.h"
#include "preload.h"
@ -155,8 +155,6 @@ void Daemon::run()
// load and resolve all undefined symbols for each dynamic library from the list
preload();
forkKiller();
// Create sockets for each of the boosters
Connection::initSocket(MBooster::socketName());
Connection::initSocket(QtBooster::socketName());
@ -166,6 +164,7 @@ void Daemon::run()
forkBooster(MBooster::type());
forkBooster(QtBooster::type());
forkBooster(WRTBooster::type());
forkBooster(MonitorBooster::type());
while (true)
{
@ -209,21 +208,6 @@ void Daemon::run()
}
}
void Daemon::forkKiller()
{
pid_t pid = fork();
if (pid == -1)
Logger::logErrorAndDie(EXIT_FAILURE, "Daemon: Forking killer process failed.");
if (pid == 0) { // child
// If theme or language changes, reset boosters
BoosterKiller bk;
bk.addKey("/meegotouch/theme/name");
bk.addKey("/meegotouch/i18n/language");
bk.addProcessName("booster-m");
bk.addProcessName("booster-w");
bk.start(); // does not return.
}
}
void Daemon::forkBooster(char type, int sleepTime)
{

@ -21,9 +21,25 @@
#include <QObject>
#include <cstdlib>
#include "boosterkiller.h"
#include "monitorbooster.h"
void BoosterKiller::addKey(const QString & key)
const string MonitorBooster::m_socketId = "";
int MonitorBooster::m_ProcessID = 0;
MonitorBooster::MonitorBooster()
{
addKey("/meegotouch/theme/name");
addKey("/meegotouch/i18n/language");
addProcessName("booster-m");
addProcessName("booster-w");
}
MonitorBooster::~MonitorBooster()
{
}
void MonitorBooster::addKey(const QString & key)
{
MGConfItem * item = new MGConfItem(key, 0);
m_gConfItems << QSharedPointer<MGConfItem>(item);
@ -32,20 +48,54 @@ void BoosterKiller::addKey(const QString & key)
this, SLOT(killProcesses()));
}
void BoosterKiller::addProcessName(const QString & processName)
void MonitorBooster::addProcessName(const QString & processName)
{
m_processNames << processName;
}
void BoosterKiller::start()
void MonitorBooster::start()
{
int argc = 0;
QCoreApplication(argc, 0).exec();
}
void BoosterKiller::killProcesses()
void MonitorBooster::killProcesses()
{
Q_FOREACH(QString processName, m_processNames) {
system( (QString("pkill ") + processName).toStdString().c_str() );
}
}
char MonitorBooster::type()
{
return 'k';
}
bool MonitorBooster::readCommand()
{
// never return from here
start();
return true;
}
const string & MonitorBooster::socketName()
{
return m_socketId;
}
const string & MonitorBooster::socketId() const
{
return m_socketId;
}
void MonitorBooster::setProcessId(int pid)
{
m_ProcessID = pid;
}
int MonitorBooster::processId()
{
return m_ProcessID;
}

@ -17,27 +17,41 @@
**
****************************************************************************/
#ifndef BOOSTERKILLER_H
#define BOOSTERKILLER_H
#ifndef MONITORBOOSTER_H
#define MONITORBOOSTER_H
#include <QObject>
#include <QStringList>
#include <QSharedPointer>
#include <MGConfItem>
#include "booster.h"
class QString;
/*! \class BoosterKiller
/*! \class MonitorBooster
*
* BoosterKiller kills certain boosters e.g. when themeing or language changes.
* MonitorBooster kills certain boosters e.g. when themeing or language changes.
* Daemon will then restart the boosters.
*/
class BoosterKiller : public QObject
class MonitorBooster : public QObject, public Booster
{
Q_OBJECT
public:
//! Constructor.
MonitorBooster();
//! Destructor.
virtual ~MonitorBooster();
/*!
* \brief Return the empty strung (not used in MonitorBooster).
* \return empty string.
*/
static const string & socketName();
//! Add a GConf key to trigger booster process termination
void addKey(const QString & key);
@ -49,15 +63,49 @@ class BoosterKiller : public QObject
*/
void start();
private Q_SLOTS:
/*!
* \brief Return a unique character ('k') represtenting the type of MonitorBooster.
* \return Type character.
*/
static char type();
/*!
* \brief Override default behaviour, don't wait for commands from invoker.
* \return true on success
*/
virtual bool readCommand();
//! \reimp
virtual char boosterType() const { return type(); }
/*!
* \brief Keep booster pid, should be reset before booster run application's main() function
*/
static void setProcessId(int pid);
/*!
* \brief Return booster pid
*/
static int processId();
protected:
//! \reimp
virtual const string & socketId() const;
private Q_SLOTS:
//! Kill all added processes
void killProcesses();
private:
static const string m_socketId;
static int m_ProcessID;
QStringList m_processNames;
QList<QSharedPointer<MGConfItem> > m_gConfItems;
};
#endif // BOOSTERKILLER_H
#endif // MONITORBOOSTER_H
Loading…
Cancel
Save