]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Make the hashing function calculate something that makes more sense.
authorRussell Bryant <russell@russellbryant.com>
Fri, 23 Feb 2007 22:26:00 +0000 (22:26 +0000)
committerRussell Bryant <russell@russellbryant.com>
Fri, 23 Feb 2007 22:26:00 +0000 (22:26 +0000)
(Thanks to bmd on #asterisk-dev for pointing out my pointless math).

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@56487 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c

index 958a95aba8b516d4d393c1df88e7f209a0bd7cc3..6781b2a4e77ec50ac05c2ff5ef701f2f793d4feb 100644 (file)
@@ -633,7 +633,7 @@ struct chan_iax2_pvt {
        int frames_received;
 
        AST_LIST_ENTRY(chan_iax2_pvt) entry;
-       unsigned int hash;
+       unsigned short hash;
 };
 
 /* Somewhat arbitrary prime number */
@@ -1265,15 +1265,10 @@ static int make_trunk(unsigned short callno, int locked)
        return res;
 }
 
-static inline unsigned int peer_hash_val(const struct sockaddr_in *sin, unsigned short callno)
+static inline unsigned short peer_hash_val(const struct sockaddr_in *sin, unsigned short callno)
 {
-       return ( (sin->sin_addr.s_addr & 0xFF000000) ^ 
-                (sin->sin_addr.s_addr & 0x00FF0000) ^
-                (sin->sin_addr.s_addr & 0x0000FF00) ^ 
-                (sin->sin_addr.s_addr & 0x000000FF) ^
-                (sin->sin_port & 0xFF00) ^ (sin->sin_port ^ 0x00FF) ^
-                (callno & 0xFF00) ^ (callno & 0x00FF) ) 
-                % PVT_HASH_SIZE;
+       return ( (sin->sin_addr.s_addr >> 16) ^ sin->sin_addr.s_addr ^
+                sin->sin_port ^ callno ) % PVT_HASH_SIZE;
 }
 
 static inline void hash_on_peer(struct chan_iax2_pvt *pvt)
@@ -1298,7 +1293,7 @@ static int find_callno(unsigned short callno, unsigned short dcallno, struct soc
        struct timeval now;
        char host[80];
        if (new <= NEW_ALLOW) {
-               unsigned int hash = peer_hash_val(sin, callno);
+               unsigned short hash = peer_hash_val(sin, callno);
                const struct chan_iax2_pvt *pvt;
                AST_RWLIST_RDLOCK(&pvt_hash_tbl[hash]);
                AST_RWLIST_TRAVERSE(&pvt_hash_tbl[hash], pvt, entry) {