From 98e3d3f36feea8550e12b02f07414643cbfcd5e0 Mon Sep 17 00:00:00 2001 From: Wolfgang Hommel Date: Sat, 2 Apr 2022 13:47:04 +0200 Subject: select(): Scale timeout parameter by user rate on return (addresses #382) --- src/libfaketime.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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; } -- cgit v1.2.1