Author: file
Date: Mon Mar 23 10:34:41 2015
New Revision: 433304

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=433304
Log:
Fix sorting of SRV records. The code assumed it was pre-sorted based on 
priority but it is not.

Modified:
    team/group/dns_srv/main/dns_srv.c

Modified: team/group/dns_srv/main/dns_srv.c
URL: 
http://svnview.digium.com/svn/asterisk/team/group/dns_srv/main/dns_srv.c?view=diff&rev=433304&r1=433303&r2=433304
==============================================================================
--- team/group/dns_srv/main/dns_srv.c (original)
+++ team/group/dns_srv/main/dns_srv.c Mon Mar 23 10:34:41 2015
@@ -131,13 +131,22 @@
        while (AST_LIST_FIRST(&result->records)) {
                unsigned int random_weight;
                unsigned int weight_sum;
-               unsigned short cur_priority = ((struct ast_dns_srv_record 
*)AST_LIST_FIRST(&result->records))->priority;
+               unsigned short cur_priority = 0;
                struct dns_records temp_list = AST_LIST_HEAD_NOLOCK_INIT_VALUE;
                weight_sum = 0;
 
+               /* Find the lowest current priority to work on */
+               AST_LIST_TRAVERSE(&result->records, current, list) {
+                       if (!cur_priority || ((struct ast_dns_srv_record 
*)current)->priority < cur_priority) {
+                               cur_priority = ((struct ast_dns_srv_record 
*)current)->priority;
+                       }
+               }
+
+               /* Find all records which match this priority */
                AST_LIST_TRAVERSE_SAFE_BEGIN(&result->records, current, list) {
-                       if (((struct ast_dns_srv_record *)current)->priority != 
cur_priority)
-                               break;
+                       if (((struct ast_dns_srv_record *)current)->priority != 
cur_priority) {
+                               continue;
+                       }
 
                        AST_LIST_MOVE_CURRENT(&temp_list, list);
                }


-- 
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

svn-commits mailing list
To UNSUBSCRIBE or update options visit:
   http://lists.digium.com/mailman/listinfo/svn-commits

Reply via email to