+static void
+expire_dnrs(UNUSED_ARG(void *data))
+{
+ dict_iterator_t it;
+ struct do_not_register *dnr;
+
+ for(it = dict_first(handle_dnrs); it; it = iter_next(it))
+ {
+ dnr = iter_data(it);
+ if(!dnr->expires || dnr->expires > now)
+ continue;
+ dict_remove(handle_dnrs, dnr->chan_name + 1);
+ }
+ for(it = dict_first(plain_dnrs); it; it = iter_next(it))
+ {
+ dnr = iter_data(it);
+ if(!dnr->expires || dnr->expires > now)
+ continue;
+ dict_remove(plain_dnrs, dnr->chan_name);
+ }
+ for(it = dict_first(mask_dnrs); it; it = iter_next(it))
+ {
+ dnr = iter_data(it);
+ if(!dnr->expires || dnr->expires > now)
+ continue;
+ dict_remove(mask_dnrs, dnr->chan_name);
+ }
+
+ if(chanserv_conf.dnr_expire_frequency)
+ timeq_add(now + chanserv_conf.dnr_expire_frequency, expire_dnrs, NULL);
+}
+