From b85a5ffbe3f687c1ad5a5f6ea0831c805b10fdf6 Mon Sep 17 00:00:00 2001 From: Russell Bryant Date: Fri, 23 Feb 2007 22:26:00 +0000 Subject: [PATCH] Make the hashing function calculate something that makes more sense. (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 | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index 958a95aba8..6781b2a4e7 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -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) {