Overview
Comment: | Correctly handle an empty priority list. It should not exist, but this is no reason to not terminate. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
0fe3ad230469cfa74644e16507f32963 |
User & Date: | js on 2011-05-25 22:13:51 |
Other Links: | manifest | tags |
Context
2011-05-25
| ||
22:41 | Get rid of an unnecessary loop. check-in: e240aaaf2a user: js tags: trunk | |
22:13 |
Correctly handle an empty priority list. It should not exist, but this is no reason to not terminate. check-in: 0fe3ad2304 user: js tags: trunk | |
22:08 | Fix XMPPSRVEnumerator by rewriting almost all of it. check-in: 55929f12b9 user: js tags: trunk | |
Changes
Modified src/XMPPSRVEnumerator.m from [1b3191e9e7] to [27d37edf8c].
︙ | ︙ | |||
317 318 319 320 321 322 323 | } - (id)nextObject { XMPPSRVEntry *ret; of_list_object_t *iter; uint32_t totalWeight = 0; | | < > > > | | | 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 | } - (id)nextObject { XMPPSRVEntry *ret; of_list_object_t *iter; uint32_t totalWeight = 0; BOOL loop = YES; if (done) return nil; if (listIter == NULL) listIter = [list lastListObject]; if (listIter == NULL) return nil; if (subListCopy == nil) subListCopy = [listIter->object copy]; for (iter = [subListCopy firstListObject]; iter != NULL; iter = iter->next) { totalWeight += [iter->object weight]; [iter->object setAccumulatedWeight: totalWeight]; } if ([subListCopy count] == 0) loop = NO; while (loop) { uint32_t randomWeight; RAND_pseudo_bytes((uint8_t*)&randomWeight, sizeof(uint32_t)); randomWeight %= (totalWeight + 1); for (iter = [subListCopy firstListObject]; iter != NULL; iter = iter->next) { if ([iter->object accumulatedWeight] >= randomWeight) { ret = [[iter->object retain] autorelease]; [subListCopy removeListObject: iter]; loop = NO; break; } } } if ([subListCopy count] == 0) { [subListCopy release]; |
︙ | ︙ |