Skip to content

Commit

Permalink
[Rework] Store the current worker, so other libraries could use this …
Browse files Browse the repository at this point in the history
…information
  • Loading branch information
vstakhov committed Oct 16, 2022
1 parent de1cf75 commit ff63900
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
11 changes: 5 additions & 6 deletions src/libserver/hyperscan_tools.cxx
Expand Up @@ -23,6 +23,7 @@
#include "libutil/cxx/locked_file.hxx"
#include "hs.h"
#include "logger.h"
#include "worker_util.h"

#include <glob.h> /* for glob */
#include <unistd.h> /* for unlink */
Expand All @@ -49,13 +50,12 @@ class hs_known_files_cache {
ankerl::svector<std::string, 4> cache_dirs;
ankerl::svector<std::string, 8> cache_extensions;
ankerl::unordered_dense::set<std::string> known_cached_files;
bool need_cleanup = false;
private:
hs_known_files_cache() = default;

virtual ~hs_known_files_cache() {
// Cleanup cache dir
if (need_cleanup) {
if (rspamd_current_worker != nullptr && rspamd_worker_is_primary_controller(rspamd_current_worker)) {
auto cleanup_dir = [&](std::string_view dir) -> void {
for (const auto &ext : cache_extensions) {
glob_t globbuf;
Expand Down Expand Up @@ -101,12 +101,11 @@ class hs_known_files_cache {
hs_known_files_cache(const hs_known_files_cache &) = delete;
hs_known_files_cache(hs_known_files_cache &&) = delete;

static auto get(bool need_cleanup) -> hs_known_files_cache& {
static auto get() -> hs_known_files_cache& {
static hs_known_files_cache *singleton = nullptr;

if (singleton == nullptr) {
singleton = new hs_known_files_cache;
singleton->need_cleanup = need_cleanup;
}

return *singleton;
Expand Down Expand Up @@ -169,9 +168,9 @@ hs_shared_from_serialized(raii_mmaped_file &&map) -> tl::expected<hs_shared_data
return tl::expected<hs_shared_database, std::string>{tl::in_place, target};
}

auto load_cached_hs_file(const char *fname, bool need_cleanup) -> tl::expected<hs_shared_database, std::string>
auto load_cached_hs_file(const char *fname) -> tl::expected<hs_shared_database, std::string>
{
auto &hs_cache = hs_known_files_cache::get(need_cleanup);
auto &hs_cache = hs_known_files_cache::get();

return raii_mmaped_file::mmap_shared(fname, O_RDONLY, PROT_READ)
.and_then([&]<class T>(T &&cached_serialized) -> tl::expected<hs_shared_database, std::string> {
Expand Down
3 changes: 3 additions & 0 deletions src/libserver/worker_util.c
Expand Up @@ -64,6 +64,8 @@
#include "contrib/libev/ev.h"
#include "libstat/stat_api.h"

struct rspamd_worker *rspamd_current_worker = NULL;

/* Forward declaration */
static void rspamd_worker_heartbeat_start (struct rspamd_worker *,
struct ev_loop *);
Expand Down Expand Up @@ -1276,6 +1278,7 @@ rspamd_fork_worker (struct rspamd_main *rspamd_main,

switch (wrk->pid) {
case 0:
rspamd_current_worker = wrk;
rspamd_handle_child_fork (wrk, rspamd_main, cf, listen_sockets);
break;
case -1:
Expand Down
2 changes: 2 additions & 0 deletions src/libserver/worker_util.h
Expand Up @@ -36,6 +36,8 @@ typedef void (*rspamd_sig_handler_t) (gint, siginfo_t *, void *);
struct rspamd_worker;
struct rspamd_worker_signal_handler;

extern struct rspamd_worker *rspamd_current_worker;

/**
* Init basic signals for a worker
* @param worker
Expand Down

0 comments on commit ff63900

Please sign in to comment.