]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: flush all caches if SIGUSR2 is received
authorLennart Poettering <lennart@poettering.net>
Fri, 10 Jun 2016 18:23:49 +0000 (20:23 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 10 Jun 2016 21:26:53 +0000 (23:26 +0200)
src/resolve/resolved-manager.c
src/resolve/resolved-manager.h
src/resolve/resolved.c

index 8dc78911438fecf8c8b9c32de2dc40610571a800..6cf75f918338d0fc401e698f5396049d863a3967 100644 (file)
@@ -466,6 +466,21 @@ static int manager_sigusr1(sd_event_source *s, const struct signalfd_siginfo *si
         return 0;
 }
 
+static int manager_sigusr2(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
+        Manager *m = userdata;
+        DnsScope *scope;
+
+        assert(s);
+        assert(si);
+        assert(m);
+
+        LIST_FOREACH(scopes, scope, m->dns_scopes)
+                dns_cache_flush(&scope->cache);
+
+        log_info("Flushed all caches.");
+        return 0;
+}
+
 int manager_new(Manager **ret) {
         _cleanup_(manager_freep) Manager *m = NULL;
         int r;
@@ -526,6 +541,7 @@ int manager_new(Manager **ret) {
                 return r;
 
         (void) sd_event_add_signal(m->event, &m->sigusr1_event_source, SIGUSR1, manager_sigusr1, m);
+        (void) sd_event_add_signal(m->event, &m->sigusr2_event_source, SIGUSR2, manager_sigusr2, m);
 
         *ret = m;
         m = NULL;
@@ -584,6 +600,7 @@ Manager *manager_free(Manager *m) {
         sd_bus_unref(m->bus);
 
         sd_event_source_unref(m->sigusr1_event_source);
+        sd_event_source_unref(m->sigusr2_event_source);
 
         sd_event_unref(m->event);
 
index e82a824f291140b8ec8001e391dd29ff294c4545..97f75ace79c66ea2161000d9a19f71e3f80b3931 100644 (file)
@@ -120,6 +120,7 @@ struct Manager {
         sd_bus_slot *prepare_for_sleep_slot;
 
         sd_event_source *sigusr1_event_source;
+        sd_event_source *sigusr2_event_source;
 
         unsigned n_transactions_total;
         unsigned n_dnssec_verdict[_DNSSEC_VERDICT_MAX];
index 6cef401870efdccfdd2d95ec4cbdd2cf77088a16..3a47b82d8a670b58a2ccbe36183b9983ca24982d 100644 (file)
@@ -71,7 +71,7 @@ int main(int argc, char *argv[]) {
         if (r < 0)
                 goto finish;
 
-        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, SIGUSR1, -1) >= 0);
+        assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, SIGUSR1, SIGUSR2, -1) >= 0);
 
         r = manager_new(&m);
         if (r < 0) {