diff --git a/src/knot/server/xfr-handler.c b/src/knot/server/xfr-handler.c index 439db02195826e6473ea19abd371317004c6dde5..a76a7f49a0c982b8abbe69d4805e86b4cb392d7b 100644 --- a/src/knot/server/xfr-handler.c +++ b/src/knot/server/xfr-handler.c @@ -172,6 +172,7 @@ static int xfr_process_udp_resp(xfrworker_t *w, int fd, knot_ns_xfr_t *data) /* Check if zone is valid. */ rcu_read_lock(); if (knot_zone_flags(data->zone) & KNOT_ZONE_DISCARDED) { + rcu_read_unlock(); return KNOTD_ECONNREFUSED; } rcu_read_unlock(); diff --git a/src/knot/server/zones.c b/src/knot/server/zones.c index 8f607bf6765601dfdd6b9cf52532e7879164916f..705d9346467b9e0d1d417f522c1b919b69a80382 100644 --- a/src/knot/server/zones.c +++ b/src/knot/server/zones.c @@ -342,7 +342,7 @@ static int zones_expire_ev(event_t *e) pthread_mutex_unlock(&zd->xfr_in.lock); log_server_warning("Non-existent zone expired. Ignoring.\n"); rcu_read_unlock(); - return 0; + return KNOTD_EOK; } /* Publish expired zone. */ @@ -379,7 +379,7 @@ static int zones_expire_ev(event_t *e) /* Release holding reference. */ knot_zone_release(zone); - return 0; + return KNOTD_EOK; } /*! @@ -1162,7 +1162,7 @@ static int zones_load_changesets(const knot_zone_t *zone, dbg_zones_detail("Bad arguments: zd->ixfr_db=%p\n", zone->data); return KNOTD_EINVAL; } - + rcu_read_lock(); dbg_xfr("xfr: loading changesets for zone '%s' from serial %u to %u\n", zd->conf->name, from, to); @@ -2097,7 +2097,6 @@ int zones_zonefile_sync(knot_zone_t *zone, journal_t *journal) if (zd->zonefile_serial != serial_to) { /* Save zone to zonefile. */ - rcu_read_lock(); dbg_zones("zones: syncing '%s' differences to '%s' " "(SOA serial %u)\n", zd->conf->name, zd->conf->file, serial_to); @@ -2109,7 +2108,6 @@ int zones_zonefile_sync(knot_zone_t *zone, journal_t *journal) rcu_read_unlock(); return ret; } - rcu_read_unlock(); /* Update journal entries. */ dbg_zones_verb("zones: unmarking all dirty nodes "