comparison 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
comparison
equal deleted inserted replaced
742:eefb6fa3c904 743:5d529eb0ad33
147 struct fd_peer * next = (struct fd_peer *)li; 147 struct fd_peer * next = (struct fd_peer *)li;
148 int cont; 148 int cont;
149 int cmp = fd_os_almostcasesrch( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen, 149 int cmp = fd_os_almostcasesrch( p->p_hdr.info.pi_diamid, p->p_hdr.info.pi_diamidlen,
150 next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, 150 next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen,
151 &cont ); 151 &cont );
152 if (cmp < 0) 152 if (cmp > 0)
153 li_inf = li; 153 li_inf = li; /* it will come after this element, for sure */
154 154
155 if (cmp == 0) { 155 if (cmp == 0) {
156 ret = EEXIST; 156 ret = EEXIST; /* we have a duplicate */
157 break; 157 break;
158 } 158 }
159 if (!cont) 159 if (!cont)
160 break; 160 break;
161 } 161 }
188 188
189 *peer = NULL; 189 *peer = NULL;
190 190
191 /* Search in the list */ 191 /* Search in the list */
192 CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) ); 192 CHECK_POSIX( pthread_rwlock_rdlock(&fd_g_peers_rw) );
193 if (igncase) 193 if (igncase) {
194 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 194 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) {
195 struct fd_peer * next = (struct fd_peer *)li; 195 struct fd_peer * next = (struct fd_peer *)li;
196 int cmp, cont; 196 int cmp, cont;
197 cmp = fd_os_almostcasesrch( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, &cont ); 197 cmp = fd_os_almostcasesrch( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen, &cont );
198 if (cmp == 0) { 198 if (cmp == 0) {
200 break; 200 break;
201 } 201 }
202 if (!cont) 202 if (!cont)
203 break; 203 break;
204 } 204 }
205 else 205 } else {
206 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) { 206 for (li = fd_g_peers.next; li != &fd_g_peers; li = li->next) {
207 struct fd_peer * next = (struct fd_peer *)li; 207 struct fd_peer * next = (struct fd_peer *)li;
208 int cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen ); 208 int cmp = fd_os_cmp( diamid, diamidlen, next->p_hdr.info.pi_diamid, next->p_hdr.info.pi_diamidlen );
209 if (cmp > 0) 209 if (cmp > 0)
210 continue; 210 continue;
211 if (cmp == 0) 211 if (cmp == 0)
212 *peer = &next->p_hdr; 212 *peer = &next->p_hdr;
213 break; 213 break;
214 } 214 }
215 }
215 CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) ); 216 CHECK_POSIX( pthread_rwlock_unlock(&fd_g_peers_rw) );
216 217
217 return 0; 218 return 0;
218 } 219 }
219 220
"Welcome to our mercurial repository"