mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-26 22:50:36 +03:00
dmeventd: enhance time waiting loop
dmeventd is 'scanning' statuses in loop (most usually in 10sec intervals) - and meanwhile it sleeps within: pthread_cond_timedwait() However this function call tends to wakeup sometimes a short amount of time sooner - and our code still believe the 'right time' has not yet arrived and basically for a moment 'busy-looped' on calling this function - so for systems with 'clock_gettime()' present we obtain time and we go 10ms to the future second - this avoids unneeded repeated invocation of our time scheduling loop. TODO: monitoring during 1 hour 'time-change'...
This commit is contained in:
parent
caecbcbeac
commit
212cf8efbd
@ -752,7 +752,7 @@ static void _exit_timeout(void *unused __attribute__((unused)))
|
||||
static void *_timeout_thread(void *unused __attribute__((unused)))
|
||||
{
|
||||
struct thread_status *thread;
|
||||
struct timespec timeout;
|
||||
struct timespec timeout, real_time;
|
||||
time_t curr_time;
|
||||
int ret;
|
||||
|
||||
@ -763,7 +763,16 @@ static void *_timeout_thread(void *unused __attribute__((unused)))
|
||||
while (!dm_list_empty(&_timeout_registry)) {
|
||||
timeout.tv_sec = 0;
|
||||
timeout.tv_nsec = 0;
|
||||
#ifndef HAVE_REALTIME
|
||||
curr_time = time(NULL);
|
||||
#else
|
||||
if (clock_gettime(CLOCK_REALTIME, &real_time)) {
|
||||
log_error("Failed to read clock_gettime().");
|
||||
break;
|
||||
}
|
||||
/* 10ms back to the future */
|
||||
curr_time = real_time.tv_sec + ((real_time.tv_nsec > (1000000000 - 10000000)) ? 1 : 0);
|
||||
#endif
|
||||
|
||||
dm_list_iterate_items_gen(thread, &_timeout_registry, timeout_list) {
|
||||
if (thread->next_time <= curr_time) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user