summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/conf/modules.conf.example12
-rw-r--r--src/modules/m_permchannels.cpp14
-rw-r--r--src/modules/m_xline_db.cpp15
3 files changed, 33 insertions, 8 deletions
diff --git a/docs/conf/modules.conf.example b/docs/conf/modules.conf.example
index dec54ec65..3bf1c2e99 100644
--- a/docs/conf/modules.conf.example
+++ b/docs/conf/modules.conf.example
@@ -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">
#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
# ____ _ _____ _ _ ____ _ _ _ #
diff --git a/src/modules/m_permchannels.cpp b/src/modules/m_permchannels.cpp
index 898d7aed8..4e365d0ab 100644
--- a/src/modules/m_permchannels.cpp
+++ b/src/modules/m_permchannels.cpp
@@ -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
diff --git a/src/modules/m_xline_db.cpp b/src/modules/m_xline_db.cpp
index 925024aea..00605f259 100644
--- a/src/modules/m_xline_db.cpp
+++ b/src/modules/m_xline_db.cpp
@@ -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()