Mercurial > hg > freeDiameter
diff libfdcore/peers.c @ 743:5d529eb0ad33 1.1.0
Fix bug in peers order
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Tue, 29 Mar 2011 11:42:53 +0900 |
parents | 4a9f08d6b6ba |
children | 2557127f3c8b |
line wrap: on
line diff
--- a/libfdcore/peers.c Tue Mar 29 10:48:04 2011 +0900 +++ b/libfdcore/peers.c Tue Mar 29 11:42:53 2011 +0900 @@ -149,11 +149,11 @@ int cmp = fd_os_almostcasesrch( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, &cont ); - if (cmp < 0) - li_inf = li; + if (cmp > 0) + li_inf = li; /* it will come after this element, for sure */ if (cmp == 0) { - ret = EEXIST; + ret = EEXIST; /* we have a duplicate */ break; } if (!cont) @@ -190,7 +190,7 @@ /* Search in the list */ CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) ); - if (igncase) + if (igncase) { for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { struct fd_peer * next = (struct fd_peer *)li; int cmp, cont; @@ -202,7 +202,7 @@ if (!cont) break; } - else + } else { for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { struct fd_peer * next = (struct fd_peer *)li; int cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); @@ -212,6 +212,7 @@ *peer = &next->p_hdr; break; } + } CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) ); return 0;