From 4584e3ac402580e2bec7cdf96b4d835af8d6b430 Mon Sep 17 00:00:00 2001 From: Lubos Slovak <lubos.slovak@nic.cz> Date: Fri, 4 Oct 2013 15:43:11 +0200 Subject: [PATCH] Fixed(?) RCU locks (Added a few more of them) --- src/knot/server/xfr-handler.c | 3 +++ src/knot/server/zones.c | 3 +++ src/libknot/nameserver/name-server.c | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/knot/server/xfr-handler.c b/src/knot/server/xfr-handler.c index eada9f188..57befccba 100644 --- a/src/knot/server/xfr-handler.c +++ b/src/knot/server/xfr-handler.c @@ -577,6 +577,7 @@ static int xfr_async_finish(fdset_t *set, unsigned id) static int xfr_task_finalize(xfrworker_t *w, knot_ns_xfr_t *rq) { int ret = KNOT_EINVAL; + rcu_read_lock(); knot_nameserver_t *ns = w->master->ns; if (rq->type == XFR_TYPE_AIN) { @@ -614,6 +615,8 @@ static int xfr_task_finalize(xfrworker_t *w, knot_ns_xfr_t *rq) rq->new_contents = NULL; /* Do not free. */ } + rcu_read_unlock(); + return ret; } diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index 49745ac4b..f36089636 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -2941,6 +2941,8 @@ int zones_save_zone(const knot_ns_xfr_t *xfr) dbg_xfr("xfr: %s Saving new zone file.\n", xfr->msg); + rcu_read_lock(); + zonedata_t *zd = (zonedata_t *)knot_zone_data(xfr->zone); knot_zone_contents_t *new_zone = xfr->new_contents; @@ -2961,6 +2963,7 @@ int zones_save_zone(const knot_ns_xfr_t *xfr) /* dump the zone into text zone file */ int ret = zones_dump_zone_text(new_zone, zonefile); + rcu_read_unlock(); return ret; } diff --git a/src/libknot/nameserver/name-server.c b/src/libknot/nameserver/name-server.c index 545c81474..7aeeeec57 100644 --- a/src/libknot/nameserver/name-server.c +++ b/src/libknot/nameserver/name-server.c @@ -4058,7 +4058,9 @@ int knot_ns_switch_zone(knot_nameserver_t *nameserver, zone->zone = z; } + rcu_read_unlock(); int ret = xfrin_switch_zone(z, zone, xfr->type); + rcu_read_lock(); dbg_ns_exec_verb( dbg_ns_verb("Zone db contents: (zone count: %zu)\n", -- GitLab