e powerszve - fix sleep timeout for select to be correct

bad inverse fmod and using int not double first before converting to
microseconds...
This commit is contained in:
Carsten Haitzler 2017-09-12 11:02:44 +09:00
parent 73855900ed
commit 9eebe065c2
1 changed files with 4 additions and 3 deletions

View File

@ -164,6 +164,7 @@ e_powersave_sleeper_free(E_Powersave_Sleeper *sleeper)
E_API void E_API void
e_powersave_sleeper_sleep(E_Powersave_Sleeper *sleeper, int poll_interval) e_powersave_sleeper_sleep(E_Powersave_Sleeper *sleeper, int poll_interval)
{ {
double timf;
unsigned int tim; unsigned int tim;
fd_set rfds, wfds, exfds; fd_set rfds, wfds, exfds;
struct timeval tv; struct timeval tv;
@ -171,14 +172,14 @@ e_powersave_sleeper_sleep(E_Powersave_Sleeper *sleeper, int poll_interval)
char buf[1] = { 1 }; char buf[1] = { 1 };
if (!sleeper) return; if (!sleeper) return;
if (e_powersave_mode_get() == E_POWERSAVE_MODE_FREEZE) tim = 3600; if (e_powersave_mode_get() == E_POWERSAVE_MODE_FREEZE) timf = 3600;
else tim = (double)poll_interval / 8.0; else timf = (double)poll_interval / 8.0;
FD_ZERO(&rfds); FD_ZERO(&rfds);
FD_ZERO(&wfds); FD_ZERO(&wfds);
FD_ZERO(&exfds); FD_ZERO(&exfds);
FD_SET(sleeper->fd, &rfds); FD_SET(sleeper->fd, &rfds);
tim = (fmod(ecore_time_get(), tim) * 1000000.0); tim = ((timf - fmod(ecore_time_get(), timf)) * 1000000.0);
tv.tv_sec = tim / 1000000; tv.tv_sec = tim / 1000000;
tv.tv_usec = tim % 1000000; tv.tv_usec = tim % 1000000;
for (;;) for (;;)