summaryrefslogtreecommitdiffstats
path: root/src/backends.c
diff options
context:
space:
mode:
authorCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2017-02-20 22:45:56 +0200
committerCosta Tsaousis (ktsaou) <costa@tsaousis.gr>2017-02-22 01:00:26 +0200
commiteb13ee695866a42e1504799775c3bff5a8dab471 (patch)
tree811ae534fc1173c9acf9bf83d758b0f0ca5e0d79 /src/backends.c
parent489f4dfccb2259103175c01c4b51d76946248629 (diff)
properly lock all sensitive linked lists
Diffstat (limited to 'src/backends.c')
-rw-r--r--src/backends.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/src/backends.c b/src/backends.c
index 30fba7fef6..300f6ae314 100644
--- a/src/backends.c
+++ b/src/backends.c
@@ -309,31 +309,25 @@ void *backends_main(void *ptr) {
if(unlikely(pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &pthreadoldcancelstate) != 0))
error("Cannot set pthread cancel state to DISABLE.");
+ rrd_rdlock();
RRDHOST *host;
- for(host = localhost; host ; host = host->next) {
- // for each host
-
+ rrdhost_foreach_read(host) {
rrdhost_rdlock(host);
RRDSET *st;
- for(st = host->rrdset_root; st; st = st->next) {
- // for each chart
-
+ rrdset_foreach_read(st, host) {
rrdset_rdlock(st);
RRDDIM *rd;
- for(rd = st->dimensions; rd; rd = rd->next) {
- // for each dimension
-
+ rrddim_foreach_read(rd, st) {
if(rd->last_collected_time.tv_sec >= after)
chart_buffered_metrics += backend_request_formatter(b, prefix, host, (host == localhost)?hostname:host->hostname, st, rd, after, before, options);
}
-
rrdset_unlock(st);
}
-
rrdhost_unlock(host);
}
+ rrd_unlock();
if(unlikely(pthread_setcancelstate(pthreadoldcancelstate, NULL) != 0))
error("Cannot set pthread cancel state to RESTORE (%d).", pthreadoldcancelstate);