switch_port_t start;
switch_port_t end;
switch_port_t next;
- switch_byte_t *track;
+ int8_t *track;
uint32_t track_len;
uint32_t track_used;
switch_port_flag_t flags;
int odd = switch_test_flag(alloc, SPF_ODD);
switch_mutex_lock(alloc->mutex);
- srand(getpid() + (unsigned) switch_epoch_time_now(NULL));
+ srand((unsigned)(intptr_t)port_ptr + switch_thread_self() + switch_micro_time_now());
while (alloc->track_used < alloc->track_len) {
uint32_t index;
uint32_t tries = 0;
-
+
/* randomly pick a port */
index = rand() % alloc->track_len;
while (alloc->track[index] && tries < alloc->track_len)
{
tries++;
+ if (alloc->track[index] < 0) {
+ alloc->track[index]++;
+ }
if (++index >= alloc->track_len) {
index = 0;
}
}
switch_mutex_lock(alloc->mutex);
- if (alloc->track[index]) {
- alloc->track[index] = 0;
+ if (alloc->track[index] > 0) {
+ alloc->track[index] = -4;
alloc->track_used--;
status = SWITCH_STATUS_SUCCESS;
}