summaryrefslogtreecommitdiff
path: root/src/resolve/resolved-manager.c
diff options
context:
space:
mode:
authorTom Gundersen <teg@jklm.no>2015-08-26 10:02:37 +0200
committerTom Gundersen <teg@jklm.no>2015-08-26 10:02:37 +0200
commitaa036f1a236dc1b76879cc3870c77c4062adf948 (patch)
tree5ec1c6c9cc50311afe08844eccb6a1069a71ab1b /src/resolve/resolved-manager.c
parentda1d9fc2cc3bf6f89c037e11a584d444d0c3a2a8 (diff)
parentd9fcf2ba1abe81ed3a7a151d6db09139b4dc7a09 (diff)
Merge pull request #1046 from poettering/resolved-dump
dump resolved cache/zone info on SIGSUR1, plus one fix
Diffstat (limited to 'src/resolve/resolved-manager.c')
-rw-r--r--src/resolve/resolved-manager.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c
index fb2a06b517..13852192c4 100644
--- a/src/resolve/resolved-manager.c
+++ b/src/resolve/resolved-manager.c
@@ -430,6 +430,31 @@ static int manager_watch_hostname(Manager *m) {
return 0;
}
+static int manager_sigusr1(sd_event_source *s, const struct signalfd_siginfo *si, void *userdata) {
+ _cleanup_free_ char *buffer = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ Manager *m = userdata;
+ size_t size = 0;
+ DnsScope *scope;
+
+ assert(s);
+ assert(si);
+ assert(m);
+
+ f = open_memstream(&buffer, &size);
+ if (!f)
+ return log_oom();
+
+ LIST_FOREACH(scopes, scope, m->dns_scopes)
+ dns_scope_dump(scope, f);
+
+ if (fflush_and_check(f) < 0)
+ return log_oom();
+
+ log_dump(LOG_INFO, buffer);
+ return 0;
+}
+
int manager_new(Manager **ret) {
_cleanup_(manager_freep) Manager *m = NULL;
int r;
@@ -480,6 +505,8 @@ int manager_new(Manager **ret) {
if (r < 0)
return r;
+ (void) sd_event_add_signal(m->event, &m->sigusr1_event_source, SIGUSR1, manager_sigusr1, m);
+
*ret = m;
m = NULL;
@@ -527,13 +554,15 @@ Manager *manager_free(Manager *m) {
sd_event_source_unref(m->bus_retry_event_source);
sd_bus_unref(m->bus);
+ sd_event_source_unref(m->sigusr1_event_source);
+
sd_event_unref(m->event);
dns_resource_key_unref(m->llmnr_host_ipv4_key);
dns_resource_key_unref(m->llmnr_host_ipv6_key);
- safe_close(m->hostname_fd);
sd_event_source_unref(m->hostname_event_source);
+ safe_close(m->hostname_fd);
free(m->llmnr_hostname);
free(m->mdns_hostname);