]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add delayed condition method
authorVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 13 Apr 2022 21:07:28 +0000 (22:07 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Wed, 13 Apr 2022 21:07:28 +0000 (22:07 +0100)
src/libserver/symcache/symcache_c.cxx
src/libserver/symcache/symcache_impl.cxx
src/libserver/symcache/symcache_internal.hxx

index 8ba991f53dffd343ac43f2cb6852caed779d3c7d..c61b17340a84fbf99f68eb0b91f93079a7f77067 100644 (file)
@@ -82,4 +82,15 @@ rspamd_symcache_set_peak_callback (struct rspamd_symcache *cache, gint cbref)
        auto *real_cache = C_API_SYMCACHE(cache);
 
        real_cache->set_peak_cb(cbref);
+}
+
+gboolean
+rspamd_symcache_add_condition_delayed (struct rspamd_symcache *cache,
+                                                                          const gchar *sym, lua_State *L, gint cbref)
+{
+       auto *real_cache = C_API_SYMCACHE(cache);
+
+       real_cache->add_delayed_condition(sym, cbref);
+
+       return TRUE;
 }
\ No newline at end of file
index 92cd6f3fb95754c10a24ad3611650b5344c471e9..2123508e64e61eee68943684551dd751fba9c3ed 100644 (file)
@@ -646,6 +646,10 @@ auto symcache::set_peak_cb(int cbref) -> void
        msg_info_cache("registered peak callback");
 }
 
+auto symcache::add_delayed_condition(std::string_view sym, int cbref) -> void
+{
+       delayed_conditions->emplace_back(sym, cbref, (lua_State *)cfg->lua_state);
+}
 
 auto cache_item::get_parent(const symcache &cache) const -> const cache_item *
 {
index 77f48de19a6d0246d07310681f6c47106598f4da..e967bbe83f3337ad735537e9082bb67cae653544 100644 (file)
@@ -345,6 +345,9 @@ struct delayed_cache_condition {
        std::string sym;
        int cbref;
        lua_State *L;
+public:
+       delayed_cache_condition(std::string_view _sym, int _cbref, lua_State *_L) :
+               sym(_sym), cbref(_cbref), L(_L) {}
 };
 
 class symcache {
@@ -499,6 +502,13 @@ public:
         * @param cbref
         */
        auto set_peak_cb(int cbref) -> void;
+
+       /**
+        * Add a delayed condition for a symbol that might not be registered yet
+        * @param sym
+        * @param cbref
+        */
+       auto add_delayed_condition(std::string_view sym, int cbref) -> void;
 };
 
 /*