diff --git a/src/knot/events/handlers/expire.c b/src/knot/events/handlers/expire.c index 1e096f47b86f681652794e03cbe085ec09cf65b4..d7deedd66c3eb6e5675c561415589fe1f7fde984 100644 --- a/src/knot/events/handlers/expire.c +++ b/src/knot/events/handlers/expire.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2019 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> +/* Copyright (C) 2022 CZ.NIC, z.s.p.o. <knot-dns@labs.nic.cz> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -38,8 +38,8 @@ int event_expire(conf_t *conf, zone_t *zone) zone->zonefile.exists = false; - // NOTE: must preserve zone->timers.soa_expire - zone->timers.next_refresh = time(NULL); + zone->timers.next_expire = time(NULL); + zone->timers.next_refresh = zone->timers.next_expire; replan_from_timers(conf, zone); return KNOT_EOK; diff --git a/src/knot/zone/zone.c b/src/knot/zone/zone.c index e456ac678c1999232b8005b72f9c8fbb7144c6ab..18bd80ed99a3d4eebc9374b7b4abc0cdd76c0a34 100644 --- a/src/knot/zone/zone.c +++ b/src/knot/zone/zone.c @@ -278,7 +278,9 @@ int selective_zone_purge(conf_t *conf, zone_t *zone, purge_flag_t params) // Purge the zone timers. if (params & PURGE_ZONE_TIMERS) { - memset(&zone->timers, 0, sizeof(zone->timers)); + zone->timers = (zone_timers_t) { + .catalog_member = zone->timers.catalog_member + }; ret = zone_timers_sweep(&zone->server->timerdb, (sweep_cb)knot_dname_cmp, zone->name); RETURN_IF_FAILED("timers", KNOT_ENOENT); @@ -314,6 +316,7 @@ int selective_zone_purge(conf_t *conf, zone_t *zone, purge_flag_t params) // Purge Catalog. if (params & PURGE_ZONE_CATALOG) { + zone->timers.catalog_member = 0; ret = catalog_zone_purge(zone->server, conf, zone->name); RETURN_IF_FAILED("catalog", KNOT_EOK); } diff --git a/src/knot/zone/zonedb-load.c b/src/knot/zone/zonedb-load.c index 5126a4ca2bedc5a0901138b643b5edfe38fdd217..cf8e3986446af1f9dfd5a99bb1553319911a36a7 100644 --- a/src/knot/zone/zonedb-load.c +++ b/src/knot/zone/zonedb-load.c @@ -251,7 +251,8 @@ static void zone_purge(conf_t *conf, zone_t *zone) static zone_contents_t *zone_expire(zone_t *zone) { - zone->timers.next_refresh = time(NULL); + zone->timers.next_expire = time(NULL); + zone->timers.next_refresh = zone->timers.next_expire; return zone_switch_contents(zone, NULL); }