summaryrefslogtreecommitdiff
path: root/src/libfaketime.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libfaketime.c')
-rw-r--r--src/libfaketime.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/libfaketime.c b/src/libfaketime.c
index 0c28e5f..684f153 100644
--- a/src/libfaketime.c
+++ b/src/libfaketime.c
@@ -1725,6 +1725,21 @@ int select(int nfds, fd_set *readfds,
#else
DONT_FAKE_TIME(ret = (*real_select)(nfds, readfds, writefds, errorfds, timeout == NULL ? timeout : &timeout_real));
#endif
+
+ /* scale timeout back if user rate is set, #382 */
+ if (user_rate_set && (timeout != NULL))
+ {
+ struct timespec ts;
+
+ ts.tv_sec = timeout_real.tv_sec;
+ ts.tv_nsec = timeout_real.tv_usec * 1000;
+
+ timespecmul(&ts, user_rate, &ts);
+
+ timeout->tv_sec = ts.tv_sec;
+ timeout->tv_usec = ts.tv_nsec / 1000;
+ }
+
return ret;
}