summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorStef Walter <stef@memberwebs.com>2004-09-23 16:32:08 +0000
committerStef Walter <stef@memberwebs.com>2004-09-23 16:32:08 +0000
commit58e0f4b3ee454a6ca561e007901df978ee636a4d (patch)
tree99aa3a5351e93fb7129174f05ddc15d7ace3fcd3 /common
parent19ad64d05534d1013c67382723c7df83a5e609c3 (diff)
Fix problems with select zeroing out timeouts.
Diffstat (limited to 'common')
-rw-r--r--common/spio.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/common/spio.c b/common/spio.c
index 91e2da0..67d32b1 100644
--- a/common/spio.c
+++ b/common/spio.c
@@ -169,6 +169,7 @@ unsigned int spio_select(spctx_t* ctx, ...)
int have = 0;
int i = 0;
va_list ap;
+ struct timeval timeout;
ASSERT(ctx);
FD_ZERO(&mask);
@@ -207,9 +208,11 @@ unsigned int spio_select(spctx_t* ctx, ...)
for(;;)
{
+ /* Select can modify the timeout argument so we copy */
+ memcpy(&timeout, &(g_state.timeout), sizeof(timeout));
+
/* Otherwise wait on more data */
- switch(select(FD_SETSIZE, &mask, NULL, NULL,
- (struct timeval*)&(g_state.timeout)))
+ switch(select(FD_SETSIZE, &mask, NULL, NULL, &timeout))
{
case 0:
sp_messagex(ctx, LOG_ERR, "network operation timed out");