]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Switch permchannels and xline_db from OnBackgroundTimer to a Timer.
authorPeter Powell <petpow@saberuk.com>
Tue, 25 Jun 2019 14:03:03 +0000 (15:03 +0100)
committerPeter Powell <petpow@saberuk.com>
Tue, 25 Jun 2019 15:52:26 +0000 (16:52 +0100)
docs/conf/modules.conf.example
src/modules/m_permchannels.cpp
src/modules/m_xline_db.cpp

index dec54ec65b03f65145ba78f95b248361ccf8e72a..3bf1c2e993b309098d323cb9d311e9454e957773 100644 (file)
 #
 # 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.
 # 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">
 
 #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#
 #    ____                _   _____ _     _       ____  _ _   _        #
index 898d7aed8207d79a16254ac2367e27f234b45fb0..4e365d0abe48ba5fcd37bd7471b78d4974c0bc3f 100644 (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
index 925024aea51baed27027aa74304692daf173aacd..00605f259373898a2fe890ee54db10017d7ada58 100644 (file)
 #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()