]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
slight optimization for dns_rbt_findnode() when bitstrings are involved:
authorDavid Lawrence <source@isc.org>
Thu, 31 May 2001 22:32:46 +0000 (22:32 +0000)
committerDavid Lawrence <source@isc.org>
Thu, 31 May 2001 22:32:46 +0000 (22:32 +0000)
skip the hashing attempts entirely when not at the root of a level

lib/dns/rbt.c

index cc3c65e4bbe85f369acfcecdfbc00b25e9337f84..9e85decb86b3e28bb6d18a4d7c0bf21b6599d205 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: rbt.c,v 1.113 2001/05/31 21:52:22 tale Exp $ */
+/* $Id: rbt.c,v 1.114 2001/05/31 22:32:46 tale Exp $ */
 
 /* Principal Authors: DCL */
 
@@ -860,7 +860,17 @@ dns_rbt_findnode(dns_rbt_t *rbt, dns_name_t *name, dns_name_t *foundname,
                        unsigned int hash;
                        isc_boolean_t has_bitstring = ISC_FALSE;
 
-                       if (rbt->hashtable == NULL)
+                       /*
+                        * If there is no hash table, hashing can't be done.
+                        * Similarly, when current != current_root, that
+                        * means a left or right pointer was followed, which
+                        * only happens when the algorithm fell through to
+                        * the traditional binary search because of a
+                        * bitstring label, so that traditional search
+                        * should be continued.
+                        */
+                       if (rbt->hashtable == NULL ||
+                           current != current_root)
                                goto nohash;
 
                        nlabels = dns_name_countlabels(search_name);