Switch permchannels and xline_db from OnBackgroundTimer to a Timer.

This commit is contained in:
Peter Powell 2019-06-25 15:03:03 +01:00
parent 30a651d092
commit 02beded762
3 changed files with 33 additions and 8 deletions

View File

@ -1658,7 +1658,12 @@
#
# If 'listmodes' is true then all list modes (+b, +I, +e, +g...) will be
# saved. Defaults to false.
#<permchanneldb filename="permchannels.conf" listmodes="true">
#
# 'saveperiod' determines how often to check if the database needs to be
# saved to disk. Defaults to every five seconds.
#<permchanneldb filename="permchannels.conf"
# listmodes="true"
# saveperiod="5s">
#<include file="permchannels.conf">
#
# You may also create channels on startup by using the <permchannels> block.
@ -2316,8 +2321,9 @@
# be a lot less bans to apply - as most of them will already be there.
#<module name="xline_db">
# Specify the filename for the xline database here.
#<xlinedb filename="xline.db">
# Specify the filename for the xline database and how often to check whether
# the database needs to be saved here.
#<xlinedb filename="xline.db" saveperiod="5s">
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# ____ _ _____ _ _ ____ _ _ _ #

View File

@ -156,7 +156,10 @@ static bool WriteDatabase(PermChannel& permchanmode, Module* mod, bool save_list
return true;
}
class ModulePermanentChannels : public Module
class ModulePermanentChannels
: public Module
, public Timer
{
PermChannel p;
bool dirty;
@ -165,7 +168,10 @@ class ModulePermanentChannels : public Module
public:
ModulePermanentChannels()
: p(this), dirty(false), loaded(false)
: Timer(0, true)
, p(this)
, dirty(false)
, loaded(false)
{
}
@ -174,6 +180,7 @@ public:
ConfigTag* tag = ServerInstance->Config->ConfValue("permchanneldb");
permchannelsconf = tag->getString("filename");
save_listmodes = tag->getBool("listmodes");
SetInterval(tag->getDuration("saveperiod", 5));
if (!permchannelsconf.empty())
permchannelsconf = ServerInstance->Config->Paths.PrependConfig(permchannelsconf);
@ -265,11 +272,12 @@ public:
dirty = true;
}
void OnBackgroundTimer(time_t) CXX11_OVERRIDE
bool Tick(time_t) CXX11_OVERRIDE
{
if (dirty)
WriteDatabase(p, this, save_listmodes);
dirty = false;
return true;
}
void Prioritize() CXX11_OVERRIDE

View File

@ -22,11 +22,20 @@
#include "xline.h"
#include <fstream>
class ModuleXLineDB : public Module
class ModuleXLineDB
: public Module
, public Timer
{
private:
bool dirty;
std::string xlinedbpath;
public:
ModuleXLineDB()
: Timer(0, true)
{
}
void init() CXX11_OVERRIDE
{
/* Load the configuration
@ -37,6 +46,7 @@ class ModuleXLineDB : public Module
*/
ConfigTag* Conf = ServerInstance->Config->ConfValue("xlinedb");
xlinedbpath = ServerInstance->Config->Paths.PrependData(Conf->getString("filename", "xline.db"));
SetInterval(Conf->getDuration("saveperiod", 5));
// Read xlines before attaching to events
ReadDatabase();
@ -66,13 +76,14 @@ class ModuleXLineDB : public Module
dirty = true;
}
void OnBackgroundTimer(time_t now) CXX11_OVERRIDE
bool Tick(time_t) CXX11_OVERRIDE
{
if (dirty)
{
if (WriteDatabase())
dirty = false;
}
return true;
}
bool WriteDatabase()