]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
fixup! Change rdatatypestats_ to statsmulti
authorAlessio Podda <alessio@isc.org>
Tue, 9 Sep 2025 10:14:20 +0000 (12:14 +0200)
committerAlessio Podda <alessio@isc.org>
Wed, 24 Sep 2025 15:01:49 +0000 (17:01 +0200)
12 files changed:
bin/delv/delv.c
bin/named/server.c
bin/named/statschannel.c
bin/named/zoneconf.c
lib/dns/include/dns/resolver.h
lib/dns/include/dns/stats.h
lib/dns/include/dns/zone.h
lib/dns/resolver.c
lib/dns/stats.c
lib/dns/zone.c
lib/ns/query.c
lib/ns/server.c

index 6654697977cdc45b44620453a366c62f6998c93b..d074867fcdf8f2ce96019322bdfaa00c99c6bdc7 100644 (file)
@@ -104,7 +104,7 @@ static dns_dispatch_t *dispatch4 = NULL;
 static dns_dispatch_t *dispatch6 = NULL;
 static dns_db_t *roothints = NULL;
 static isc_stats_t *resstats = NULL;
-static dns_stats_t *resquerystats = NULL;
+static isc_statsmulti_t *resquerystats = NULL;
 static FILE *logfp = NULL;
 
 /* Managers */
@@ -2183,7 +2183,7 @@ run_server(void *arg) {
 
        dns_rdatatypestats_create(isc_g_mctx, &resquerystats);
        dns_resolver_setquerystats(view->resolver, resquerystats);
-       dns_stats_detach(&resquerystats);
+       isc_statsmulti_detach(&resquerystats);
 
        dns_view_freeze(view);
 
index bb46d6e48ce4018bfb4bfd785cf75998ecf53a0c..1a2ef75acce42ad397939a925c75561414692456 100644 (file)
@@ -3844,7 +3844,7 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
        bool empty_zones_enable;
        const cfg_obj_t *disablelist = NULL;
        isc_stats_t *resstats = NULL;
-       dns_stats_t *resquerystats = NULL;
+       isc_statsmulti_t *resquerystats = NULL;
        bool auto_root = false;
        named_cache_t *nsc = NULL;
        bool zero_no_soattl;
@@ -5868,7 +5868,7 @@ cleanup:
                isc_stats_detach(&resstats);
        }
        if (resquerystats != NULL) {
-               dns_stats_detach(&resquerystats);
+               isc_statsmulti_detach(&resquerystats);
        }
        if (order != NULL) {
                dns_order_detach(&order);
index 3f1af22cfd30ae388609ea09a0ab253722ec9554..25dcfb4fcd1a9924c06970b26490d6591fdc0a68 100644 (file)
@@ -21,7 +21,6 @@
 #include <isc/mem.h>
 #include <isc/once.h>
 #include <isc/stats.h>
-#include <isc/statsmulti.h>
 #include <isc/string.h>
 #include <isc/util.h>
 
@@ -962,24 +961,6 @@ cleanup:
 #endif /* ifdef HAVE_LIBXML2 */
 }
 
-static void rdtypestat_dump(dns_rdatastatstype_t type, uint64_t val, void *arg);
-
-static void
-rdtypestat_dumpcb(isc_statscounter_t counter, uint64_t value, void *arg) {
-       dns_rdatastatstype_t type;
-       dns_rdatatype_t rdtype = dns_rdatatype_none;
-       unsigned int attributes = 0;
-
-       /* Convert counter back to dns_rdatastatstype_t, based on rdatatype_dumpcb */
-       if ((counter & 0xff) == 0) {
-               attributes |= DNS_RDATASTATSTYPE_ATTR_OTHERTYPE;
-       } else {
-               rdtype = (dns_rdatatype_t)(counter & 0xff);
-       }
-       type = DNS_RDATASTATSTYPE_VALUE((dns_rdatastatstype_t)rdtype, attributes);
-       rdtypestat_dump(type, value, arg);
-}
-
 static void
 rdtypestat_dump(dns_rdatastatstype_t type, uint64_t val, void *arg) {
        char typebuf[64];
@@ -1388,7 +1369,7 @@ zone_xmlrender(dns_zone_t *zone, void *arg) {
        if (statlevel == dns_zonestat_full) {
                isc_stats_t *zonestats;
                isc_stats_t *gluecachestats;
-               dns_stats_t *rcvquerystats;
+               isc_statsmulti_t *rcvquerystats;
                dns_stats_t *dnssecsignstats;
                uint64_t nsstat_values[ns_statscounter_max];
                uint64_t gluecachestats_values[dns_gluecachestatscounter_max];
@@ -1861,8 +1842,8 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
                                                 ISC_XMLCHAR "qtype"));
 
                dumparg.result = ISC_R_SUCCESS;
-               isc_statsmulti_dump(server->sctx->rcvquerystats,
-                                   rdtypestat_dumpcb, &dumparg, 0);
+               dns_rdatatypestats_dump(server->sctx->rcvquerystats,
+                                       rdtypestat_dump, &dumparg, 0);
                CHECK(dumparg.result);
 
                TRY0(xmlTextWriterEndElement(writer)); /* counters */
@@ -2052,7 +2033,7 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
                                          STATS_XML_XFRINS)) != 0))
        {
                isc_stats_t *istats = NULL;
-               dns_stats_t *dstats = NULL;
+               isc_statsmulti_t *dstats = NULL;
                dns_adb_t *adb = NULL;
 
                TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "view"));
@@ -2092,7 +2073,7 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
                                                &dumparg, 0);
                        CHECK(dumparg.result);
                }
-               dns_stats_detach(&dstats);
+               isc_statsmulti_detach(&dstats);
                TRY0(xmlTextWriterEndElement(writer));
 
                /* <resstats> */
@@ -2423,7 +2404,7 @@ zone_jsonrender(dns_zone_t *zone, void *arg) {
        if (statlevel == dns_zonestat_full) {
                isc_stats_t *zonestats;
                isc_stats_t *gluecachestats;
-               dns_stats_t *rcvquerystats;
+               isc_statsmulti_t *rcvquerystats;
                dns_stats_t *dnssecsignstats;
                uint64_t nsstat_values[ns_statscounter_max];
                uint64_t gluecachestats_values[dns_gluecachestatscounter_max];
@@ -2940,8 +2921,8 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
                dumparg.result = ISC_R_SUCCESS;
                dumparg.arg = counters;
 
-               isc_statsmulti_dump(server->sctx->rcvquerystats,
-                                   rdtypestat_dumpcb, &dumparg, 0);
+               dns_rdatatypestats_dump(server->sctx->rcvquerystats,
+                                       rdtypestat_dump, &dumparg, 0);
                if (dumparg.result != ISC_R_SUCCESS) {
                        json_object_put(counters);
                        goto cleanup;
@@ -3091,7 +3072,7 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
 
                        if ((flags & STATS_JSON_SERVER) != 0) {
                                json_object *res = NULL;
-                               dns_stats_t *dstats = NULL;
+                               isc_statsmulti_t *dstats = NULL;
                                isc_stats_t *istats = NULL;
 
                                res = json_object_new_object();
@@ -3140,18 +3121,18 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
 
                                        json_object_object_add(res, "qtypes",
                                                               counters);
-                                       dns_stats_detach(&dstats);
+                                       isc_statsmulti_detach(&dstats);
                                }
 
-                               dstats = dns_db_getrrsetstats(view->cachedb);
-                               if (dstats != NULL) {
+                               dns_stats_t *rrsetstats = dns_db_getrrsetstats(view->cachedb);
+                               if (rrsetstats != NULL) {
                                        counters = json_object_new_object();
                                        CHECKMEM(counters);
 
                                        dumparg.arg = counters;
                                        dumparg.result = ISC_R_SUCCESS;
                                        dns_rdatasetstats_dump(
-                                               dstats, rdatasetstats_dump,
+                                               rrsetstats, rdatasetstats_dump,
                                                &dumparg, 0);
                                        if (dumparg.result != ISC_R_SUCCESS) {
                                                json_object_put(counters);
@@ -3983,8 +3964,8 @@ named_stats_dump(named_server_t *server, FILE *fp) {
                             &dumparg, 0);
 
        fprintf(fp, "++ Incoming Queries ++\n");
-       isc_statsmulti_dump(server->sctx->rcvquerystats, rdtypestat_dumpcb,
-                           &dumparg, 0);
+       dns_rdatatypestats_dump(server->sctx->rcvquerystats, rdtypestat_dump,
+                               &dumparg, 0);
 
        fprintf(fp, "++ Outgoing Rcodes ++\n");
        dns_rcodestats_dump(server->sctx->rcodestats, rcodestat_dump, &dumparg,
@@ -3992,7 +3973,7 @@ named_stats_dump(named_server_t *server, FILE *fp) {
 
        fprintf(fp, "++ Outgoing Queries ++\n");
        ISC_LIST_FOREACH(server->viewlist, view, link) {
-               dns_stats_t *dstats = NULL;
+               isc_statsmulti_t *dstats = NULL;
                dns_resolver_getquerystats(view->resolver, &dstats);
                if (dstats == NULL) {
                        continue;
@@ -4003,7 +3984,7 @@ named_stats_dump(named_server_t *server, FILE *fp) {
                        fprintf(fp, "[View: %s]\n", view->name);
                }
                dns_rdatatypestats_dump(dstats, rdtypestat_dump, &dumparg, 0);
-               dns_stats_detach(&dstats);
+               isc_statsmulti_detach(&dstats);
        }
 
        fprintf(fp, "++ Name Server Statistics ++\n");
index 592c65a0b7d9458166c3e0ce00264b353be882c8..b2ff10f8b7c5bed8f3a4f8bbea0b0d397e87a811 100644 (file)
@@ -909,7 +909,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
        dns_masterformat_t masterformat;
        const dns_master_style_t *masterstyle = &dns_master_style_default;
        isc_stats_t *zoneqrystats;
-       dns_stats_t *rcvquerystats;
+       isc_statsmulti_t *rcvquerystats;
        dns_stats_t *dnssecsignstats;
        dns_zonestat_level_t statlevel = dns_zonestat_none;
        dns_ttl_t maxttl = 0; /* unlimited */
@@ -1157,7 +1157,7 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
        }
 
        if (rcvquerystats != NULL) {
-               dns_stats_detach(&rcvquerystats);
+               isc_statsmulti_detach(&rcvquerystats);
        }
 
        if (dnssecsignstats != NULL) {
index 14f510696e4d0a00e5c4546ea5f75b675fcb5189..ba4529189d607e4367e12674f61b8abf54abbbb5 100644 (file)
@@ -52,6 +52,7 @@
 #include <isc/loop.h>
 #include <isc/refcount.h>
 #include <isc/stats.h>
+#include <isc/statsmulti.h>
 #include <isc/tls.h>
 #include <isc/types.h>
 
@@ -614,7 +615,7 @@ dns_resolver_incstats(dns_resolver_t *res, isc_statscounter_t counter);
  */
 
 void
-dns_resolver_setquerystats(dns_resolver_t *res, dns_stats_t *stats);
+dns_resolver_setquerystats(dns_resolver_t *res, isc_statsmulti_t *stats);
 /*%<
  * Set a statistics counter set of rdata type, 'stats', for 'res'.  Once the
  * statistic set is installed, the resolver will count outgoing queries
@@ -627,7 +628,7 @@ dns_resolver_setquerystats(dns_resolver_t *res, dns_stats_t *stats);
  */
 
 void
-dns_resolver_getquerystats(dns_resolver_t *res, dns_stats_t **statsp);
+dns_resolver_getquerystats(dns_resolver_t *res, isc_statsmulti_t **statsp);
 /*%<
  * Get the rdatatype statistics counter set for 'res'.  If a statistics set is
  * set '*statsp' will be attached to the set; otherwise, '*statsp' will be
index b40f5bc9991ff58c3583860bd268b4ff42d2a080..7265bf3b45008a9a87c5eaca393c4f03195a5ad4 100644 (file)
@@ -18,6 +18,7 @@
 #include <inttypes.h>
 
 #include <isc/histo.h>
+#include <isc/statsmulti.h>
 
 #include <dns/types.h>
 
@@ -272,7 +273,7 @@ dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters);
  */
 
 void
-dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp);
+dns_rdatatypestats_create(isc_mem_t *mctx, isc_statsmulti_t **statsp);
 /*%<
  * Create a statistics counter structure per rdatatype.
  *
@@ -360,12 +361,12 @@ dns_generalstats_increment(dns_stats_t *stats, isc_statscounter_t counter);
  */
 
 void
-dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type);
+dns_rdatatypestats_increment(isc_statsmulti_t *stats, dns_rdatatype_t type);
 /*%<
  * Increment the statistics counter for 'type'.
  *
  * Requires:
- *\li  'stats' is a valid dns_stats_t created by dns_rdatatypestats_create().
+ *\li  'stats' is a valid isc_statsmulti_t created by dns_rdatatypestats_create().
  */
 
 void
@@ -444,7 +445,7 @@ dns_generalstats_dump(dns_stats_t *stats, dns_generalstats_dumper_t dump_fn,
  */
 
 void
-dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+dns_rdatatypestats_dump(isc_statsmulti_t *stats, dns_rdatatypestats_dumper_t dump_fn,
                        void *arg, unsigned int options);
 /*%<
  * Dump the current statistics counters in a specified way.  For each counter
@@ -454,7 +455,7 @@ dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
  * the ISC_STATSDUMP_VERBOSE flag, even such counters are dumped.
  *
  * Requires:
- *\li  'stats' is a valid dns_stats_t created by dns_generalstats_create().
+ *\li  'stats' is a valid isc_statsmulti_t created by dns_rdatatypestats_create().
  */
 
 void
index 88127095483a12fa92b4d19e60e401081383efeb..02a04eaa1738ed6bad84e91497ee02065fc08471 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <isc/formatcheck.h>
 #include <isc/rwlock.h>
+#include <isc/statsmulti.h>
 #include <isc/tls.h>
 
 #include <dns/catz.h>
@@ -1974,7 +1975,7 @@ void
 dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats);
 
 void
-dns_zone_setrcvquerystats(dns_zone_t *zone, dns_stats_t *stats);
+dns_zone_setrcvquerystats(dns_zone_t *zone, isc_statsmulti_t *stats);
 
 void
 dns_zone_setdnssecsignstats(dns_zone_t *zone, dns_stats_t *stats);
@@ -1992,7 +1993,7 @@ dns_zone_setdnssecsignstats(dns_zone_t *zone, dns_stats_t *stats);
 isc_stats_t *
 dns_zone_getrequeststats(dns_zone_t *zone);
 
-dns_stats_t *
+isc_statsmulti_t *
 dns_zone_getrcvquerystats(dns_zone_t *zone);
 
 dns_stats_t *
index db152f3e08974ec50e9dbd9d099d417746611a3c..9a1c48eac06a02dd35904d3fb987849bdf4c4b3b 100644 (file)
@@ -582,7 +582,7 @@ struct dns_resolver {
        unsigned int maxqueries;
        isc_result_t quotaresp[2];
        isc_stats_t *stats;
-       dns_stats_t *querystats;
+       isc_statsmulti_t *querystats;
 
        /* Additions for serve-stale feature. */
        unsigned int retryinterval; /* in milliseconds */
@@ -9509,7 +9509,7 @@ dns_resolver__destroy(dns_resolver_t *res) {
        dns_nametree_detach(&res->digests);
 
        if (res->querystats != NULL) {
-               dns_stats_detach(&res->querystats);
+               isc_statsmulti_detach(&res->querystats);
        }
        if (res->stats != NULL) {
                isc_stats_detach(&res->stats);
@@ -10686,20 +10686,20 @@ dns_resolver_incstats(dns_resolver_t *res, isc_statscounter_t counter) {
 }
 
 void
-dns_resolver_setquerystats(dns_resolver_t *res, dns_stats_t *stats) {
+dns_resolver_setquerystats(dns_resolver_t *res, isc_statsmulti_t *stats) {
        REQUIRE(VALID_RESOLVER(res));
        REQUIRE(res->querystats == NULL);
 
-       dns_stats_attach(stats, &res->querystats);
+       isc_statsmulti_attach(stats, &res->querystats);
 }
 
 void
-dns_resolver_getquerystats(dns_resolver_t *res, dns_stats_t **statsp) {
+dns_resolver_getquerystats(dns_resolver_t *res, isc_statsmulti_t **statsp) {
        REQUIRE(VALID_RESOLVER(res));
        REQUIRE(statsp != NULL && *statsp == NULL);
 
        if (res->querystats != NULL) {
-               dns_stats_attach(res->querystats, statsp);
+               isc_statsmulti_attach(res->querystats, statsp);
        }
 }
 
index 3560312cb8cc3b2d12c836c45212a25f7c67d6e3..ba80894fe88d599ed5ee35017102775a7dc88fdd 100644 (file)
@@ -21,6 +21,7 @@
 #include <isc/mem.h>
 #include <isc/refcount.h>
 #include <isc/stats.h>
+#include <isc/statsmulti.h>
 #include <isc/util.h>
 
 #include <dns/opcode.h>
@@ -189,15 +190,14 @@ dns_generalstats_create(isc_mem_t *mctx, dns_stats_t **statsp, int ncounters) {
 }
 
 void
-dns_rdatatypestats_create(isc_mem_t *mctx, dns_stats_t **statsp) {
+dns_rdatatypestats_create(isc_mem_t *mctx, isc_statsmulti_t **statsp) {
        REQUIRE(statsp != NULL && *statsp == NULL);
 
        /*
-        * Create rdtype statistics for the first 255 RRtypes,
-        * plus one additional for other RRtypes.
+        * Create rdtype statistics using statsmulti for better multithreading performance.
+        * We need RDTYPECOUNTER_MAXVAL + 1 counters (0x0602 + 1 = 1539 counters).
         */
-       create_stats(mctx, dns_statstype_rdtype, RDTYPECOUNTER_MAXTYPE + 1,
-                    statsp);
+       isc_statsmulti_create(mctx, statsp, RDTYPECOUNTER_MAXVAL + 1);
 }
 
 void
@@ -254,13 +254,13 @@ rdatatype2counter(dns_rdatatype_t type) {
 }
 
 void
-dns_rdatatypestats_increment(dns_stats_t *stats, dns_rdatatype_t type) {
+dns_rdatatypestats_increment(isc_statsmulti_t *stats, dns_rdatatype_t type) {
        isc_statscounter_t counter;
 
-       REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype);
+       REQUIRE(stats != NULL);
 
        counter = rdatatype2counter(type);
-       isc_stats_increment(stats->counters, counter);
+       isc_statsmulti_increment(stats, counter);
 }
 
 static void
@@ -460,14 +460,14 @@ rdatatype_dumpcb(isc_statscounter_t counter, uint64_t value, void *arg) {
 }
 
 void
-dns_rdatatypestats_dump(dns_stats_t *stats, dns_rdatatypestats_dumper_t dump_fn,
+dns_rdatatypestats_dump(isc_statsmulti_t *stats, dns_rdatatypestats_dumper_t dump_fn,
                        void *arg0, unsigned int options) {
        rdatadumparg_t arg;
-       REQUIRE(DNS_STATS_VALID(stats) && stats->type == dns_statstype_rdtype);
+       REQUIRE(stats != NULL);
 
        arg.fn = dump_fn;
        arg.arg = arg0;
-       isc_stats_dump(stats->counters, rdatatype_dumpcb, &arg, options);
+       isc_statsmulti_dump(stats, rdatatype_dumpcb, &arg, options);
 }
 
 static void
index 68685dcad21b78b261650384088c575e98dcdece..52530769d12bd016722f23925630c20d4dc22ac0 100644 (file)
@@ -420,7 +420,7 @@ struct dns_zone {
        dns_zonestat_level_t statlevel;
        bool requeststats_on;
        isc_stats_t *requeststats;
-       dns_stats_t *rcvquerystats;
+       isc_statsmulti_t *rcvquerystats;
        dns_stats_t *dnssecsignstats;
        uint32_t notifydelay;
        uint32_t notifydefer;
@@ -1319,7 +1319,7 @@ zone_free(dns_zone_t *zone) {
                isc_stats_detach(&zone->requeststats);
        }
        if (zone->rcvquerystats != NULL) {
-               dns_stats_detach(&zone->rcvquerystats);
+               isc_statsmulti_detach(&zone->rcvquerystats);
        }
        if (zone->dnssecsignstats != NULL) {
                dns_stats_detach(&zone->dnssecsignstats);
@@ -20074,13 +20074,13 @@ dns_zone_setrequeststats(dns_zone_t *zone, isc_stats_t *stats) {
 }
 
 void
-dns_zone_setrcvquerystats(dns_zone_t *zone, dns_stats_t *stats) {
+dns_zone_setrcvquerystats(dns_zone_t *zone, isc_statsmulti_t *stats) {
        REQUIRE(DNS_ZONE_VALID(zone));
 
        LOCK_ZONE(zone);
        if (zone->requeststats_on && stats != NULL) {
                if (zone->rcvquerystats == NULL) {
-                       dns_stats_attach(stats, &zone->rcvquerystats);
+                       isc_statsmulti_attach(stats, &zone->rcvquerystats);
                        zone->requeststats_on = true;
                }
        }
@@ -20126,7 +20126,7 @@ dns_zone_getrequeststats(dns_zone_t *zone) {
  * Return the received query stats bucket
  * see note from dns_zone_getrequeststats()
  */
-dns_stats_t *
+isc_statsmulti_t *
 dns_zone_getrcvquerystats(dns_zone_t *zone) {
        if (zone->requeststats_on) {
                return zone->rcvquerystats;
index 800a756ac62bb9146a66875e3fc722b784082508..318aa8d8480ee167a7cbd7d2fd173c7174dc59f0 100644 (file)
@@ -562,7 +562,7 @@ inc_stats(ns_client_t *client, isc_statscounter_t counter) {
        dns_rdatatype_t qtype;
        dns_rdataset_t *rdataset;
        isc_stats_t *zonestats;
-       dns_stats_t *querystats = NULL;
+       isc_statsmulti_t *querystats = NULL;
 
        ns_stats_increment(client->manager->sctx->nsstats, counter);
 
@@ -11687,8 +11687,8 @@ ns_query_start(ns_client_t *client, isc_nmhandle_t *handle) {
        rdataset = ISC_LIST_HEAD(client->query.qname->list);
        INSIST(rdataset != NULL);
        client->query.qtype = qtype = rdataset->type;
-       isc_statscounter_t counter = (qtype > 0xff) ? 0 : (isc_statscounter_t)qtype;
-       isc_statsmulti_increment(client->manager->sctx->rcvquerystats, counter);
+       dns_rdatatypestats_increment(client->manager->sctx->rcvquerystats,
+                                    qtype);
 
        log_tat(client);
 
index 9a3665b53dea22e4ceba4dba82168fb06481291e..48a2bd2f3a75a1a90f5fd07da91c80fca5f61d8f 100644 (file)
@@ -22,8 +22,6 @@
 #include <dns/stats.h>
 #include <dns/tkey.h>
 
-#include <isc/statsmulti.h>
-
 #include <ns/query.h>
 #include <ns/server.h>
 #include <ns/stats.h>
@@ -74,7 +72,7 @@ ns_server_create(isc_mem_t *mctx, ns_matchview_t matchingview,
 
        ns_stats_create(mctx, ns_statscounter_max, &sctx->nsstats);
 
-       isc_statsmulti_create(mctx, &sctx->rcvquerystats, 0x0602 + 1);
+       dns_rdatatypestats_create(mctx, &sctx->rcvquerystats);
 
        dns_opcodestats_create(mctx, &sctx->opcodestats);