git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use random_number rather than random, for external server distribution. Bug 2694
[exim.git]
/
src
/
src
/
transports
/
smtp_socks.c
diff --git
a/src/src/transports/smtp_socks.c
b/src/src/transports/smtp_socks.c
index cd8ed3e6d990f47e53b06c35e1666d8623621086..22cfbecb4379c544a9935e5efd2d64bd46f6026a 100644
(file)
--- a/
src/src/transports/smtp_socks.c
+++ b/
src/src/transports/smtp_socks.c
@@
-160,20
+160,10
@@
socks_opts * sd;
socks_opts * lim = &proxies[nproxies];
long rnd, weights;
unsigned pri;
socks_opts * lim = &proxies[nproxies];
long rnd, weights;
unsigned pri;
-static BOOL srandomed = FALSE;
if (nproxies == 1) /* shortcut, if we have only 1 server */
return (proxies[0].is_failed ? -1 : 0);
if (nproxies == 1) /* shortcut, if we have only 1 server */
return (proxies[0].is_failed ? -1 : 0);
-/* init random */
-if (!srandomed)
- {
- struct timeval tv;
- gettimeofday(&tv, NULL);
- srandom((unsigned int)(tv.tv_usec/1000));
- srandomed = TRUE;
- }
-
/* scan for highest pri */
for (pri = 0, sd = proxies; sd < lim; sd++)
if (!sd->is_failed && sd->priority > pri)
/* scan for highest pri */
for (pri = 0, sd = proxies; sd < lim; sd++)
if (!sd->is_failed && sd->priority > pri)
@@
-186,7
+176,7
@@
for (weights = 0, sd = proxies; sd < lim; sd++)
if (weights == 0) /* all servers failed */
return -1;
if (weights == 0) /* all servers failed */
return -1;
-for (rnd = random
() % weights
, i = 0; i < nproxies; i++)
+for (rnd = random
_number(weights)
, i = 0; i < nproxies; i++)
{
sd = &proxies[i];
if (!sd->is_failed && sd->priority == pri)
{
sd = &proxies[i];
if (!sd->is_failed && sd->priority == pri)