diff options
author | Costa Tsaousis (ktsaou) <costa@tsaousis.gr> | 2017-02-20 22:45:56 +0200 |
---|---|---|
committer | Costa Tsaousis (ktsaou) <costa@tsaousis.gr> | 2017-02-22 01:00:26 +0200 |
commit | eb13ee695866a42e1504799775c3bff5a8dab471 (patch) | |
tree | 811ae534fc1173c9acf9bf83d758b0f0ca5e0d79 /src/backends.c | |
parent | 489f4dfccb2259103175c01c4b51d76946248629 (diff) |
properly lock all sensitive linked lists
Diffstat (limited to 'src/backends.c')
-rw-r--r-- | src/backends.c | 16 |
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); |