cyclictest: cannot stop running with '-M' option

Most of time having '-M' option causes cyclictest  won't exit after
a duration ('-D') expires, like this quick  command on my machines:

sudo cyclictest  -S -M -D2 -d0

This is because the main thread is blocked on waiting for the next
update of MAX, but the timer thread doesn't signal the main thread
before it quits.

Signed-off-by: Jianxun Zhang <jianxun.zhang@linux.intel.com>
Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
Jianxun Zhang 2017-04-28 14:02:09 -07:00 committed by John Kacur
parent 193ed3d12e
commit 470b7394e6
1 changed files with 17 additions and 2 deletions

View File

@ -1241,6 +1241,17 @@ static void *timerthread(void *param)
}
out:
if (refresh_on_max) {
pthread_mutex_lock(&refresh_on_max_lock);
/* We could reach here with both shutdown and allstopped unset (0).
* Set shutdown with synchronization to notify the main
* thread not to be blocked when it should exit.
*/
shutdown++;
pthread_cond_signal(&refresh_on_max_cond);
pthread_mutex_unlock(&refresh_on_max_lock);
}
if (par->mode == MODE_CYCLIC)
timer_delete(timer);
@ -2516,8 +2527,9 @@ int main(int argc, char **argv)
if (refresh_on_max) {
pthread_mutex_lock(&refresh_on_max_lock);
pthread_cond_wait(&refresh_on_max_cond,
&refresh_on_max_lock);
if (!shutdown)
pthread_cond_wait(&refresh_on_max_cond,
&refresh_on_max_lock);
pthread_mutex_unlock(&refresh_on_max_lock);
}
}
@ -2527,6 +2539,9 @@ int main(int argc, char **argv)
shutdown = 1;
usleep(50000);
if (!verbose && !quiet && refresh_on_max)
printf("\033[%dB", num_threads + 2);
if (quiet)
quiet = 2;
for (i = 0; i < num_threads; i++) {