summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog3
-rw-r--r--common/spio.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index feabb57..7a791b4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+0.9.1
+ - Fixed problems with the select zeroing out timeouts.
+
0.9
- Don't quit when too many threads created
- Restructured smtp passthru system so it can be used by other apps
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");