Modules: Add a module version of CJob

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter
2014-08-06 15:32:41 +02:00
parent 0fddbba230
commit 308df21511
3 changed files with 89 additions and 0 deletions

View File

@@ -157,6 +157,10 @@ CModule::~CModule() {
}
SaveRegistry();
#ifdef HAVE_PTHREAD
CancelJobs(m_sJobs);
#endif
}
void CModule::SetUser(CUser* pUser) { m_pUser = pUser; }
@@ -449,6 +453,52 @@ void CModule::ListSockets() {
PutModule(Table);
}
#ifdef HAVE_PTHREAD
CModuleJob::~CModuleJob()
{
m_pModule->UnlinkJob(this);
}
void CModule::AddJob(CModuleJob *pJob)
{
CThreadPool::Get().addJob(pJob);
m_sJobs.insert(pJob);
}
void CModule::CancelJob(CModuleJob *pJob)
{
if (pJob == NULL)
return;
// Destructor calls UnlinkJob and removes the job from m_sJobs
CThreadPool::Get().cancelJob(pJob);
}
bool CModule::CancelJob(const CString& sJobName)
{
set<CModuleJob*>::iterator it;
for (it = m_sJobs.begin(); it != m_sJobs.end(); ++it) {
if ((*it)->GetName().Equals(sJobName)) {
CancelJob(*it);
return true;
}
}
return false;
}
void CModule::CancelJobs(const std::set<CModuleJob*>& sJobs)
{
set<CJob*> sPlainJobs(sJobs.begin(), sJobs.end());
// Destructor calls UnlinkJob and removes the jobs from m_sJobs
CThreadPool::Get().cancelJobs(sPlainJobs);
}
bool CModule::UnlinkJob(CModuleJob *pJob)
{
return 0 != m_sJobs.erase(pJob);
}
#endif
bool CModule::AddCommand(const CModCommand& Command)
{
if (Command.GetFunction() == NULL)