Do not generate a flood of complaints on rehashing the asynchronous resolver.
authorMichael Poole <mdpoole@troilus.org>
Thu, 13 Dec 2007 04:08:41 +0000 (23:08 -0500)
committerMichael Poole <mdpoole@troilus.org>
Thu, 13 Dec 2007 04:08:41 +0000 (23:08 -0500)
src/sar.c (sar_services_init): Delete and re-allocate the services dicts here.
  (sar_init): .. rather than here.

src/sar.c

index 4a50677dae49eb9e3092d90ff9fe67c9b7a7dd7c..16d89a292ade471525fdcb06d7196a659bcff008 100644 (file)
--- a/src/sar.c
+++ b/src/sar.c
@@ -1080,8 +1080,19 @@ sar_services_init(const char *etc_services)
     struct service_byname *byname;
     unsigned int ii;
 
+    /* Forget old services dicts and allocate new ones. */
+    dict_delete(services_byname);
+    services_byname = dict_new();
+    dict_set_free_data(services_byname, free);
+
+    dict_delete(services_byport);
+    services_byport = dict_new();
+    dict_set_free_data(services_byport, free);
+
+    /* Load the list from the services file. */
     sar_services_load_file(etc_services);
 
+    /* Mark well-known services as using DNS-SD SRV records. */
     for (ii = 0; tcp_srvs[ii]; ++ii) {
         byname = sar_service_byname(tcp_srvs[ii], 1);
         byname->protos[SERVICE_TCP].srv = 1;
@@ -2032,12 +2043,6 @@ sar_init(void)
     sar_nameservers = dict_new();
     dict_set_free_data(sar_nameservers, free);
 
-    services_byname = dict_new();
-    dict_set_free_data(services_byname, free);
-
-    services_byport = dict_new();
-    dict_set_free_data(services_byport, free);
-
     sar_register_helper(&sar_ipv4_helper);
 #if defined(AF_INET6)
     sar_register_helper(&sar_ipv6_helper);