diff options
author | Roman Pen <r.peniaev@gmail.com> | 2016-04-23 13:44:10 +0200 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2016-04-25 08:53:20 -0600 |
commit | 747f0e2870e6672c6af832226e10cfa8a39ff109 (patch) | |
tree | 816ed121a5962111f20180a4b6cfd7531dc09ddc | |
parent | 7338236ab386515bbcecf5c05bca6a034c12d0b9 (diff) | |
download | blktrace-747f0e2870e6672c6af832226e10cfa8a39ff109.tar.gz |
btreplay: make Ctrl-C work
is_reap_done() must also check that SIGINT or SIGTERM have come, or
we hang forever with such backtraces after Ctrl-C:
(gdb) thr a a bt
Thread 3 (Thread 0x7fbff8ff9700 (LWP 12607)):
#0 pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x0000000000402698 in replay_rec () at btreplay.c:1035
#2 0x00007fc001fe5454 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#3 0x00007fc001d1eecd in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x0000000000000000 in ?? ()
Thread 2 (Thread 0x7fbfea7fc700 (LWP 12611)):
#0 pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x0000000000402698 in replay_rec () at btreplay.c:1035
#2 0x00007fc001fe5454 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#3 0x00007fc001d1eecd in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4 0x0000000000000000 in ?? ()
Thread 1 (Thread 0x7fc00282e700 (LWP 12597)):
#0 pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x0000000000402303 in __wait_cv () at btreplay.c:413
#2 0x0000000000401ae8 in main () at btreplay.c:426
Signed-off-by: Roman Pen <r.peniaev@gmail.com>
Cc: Jens Axboe <axboe@fb.com>
Cc: <linux-btrace@vger.kernel.org>
Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r-- | btreplay/btreplay.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/btreplay/btreplay.c b/btreplay/btreplay.c index 5bf47ff..321851c 100644 --- a/btreplay/btreplay.c +++ b/btreplay/btreplay.c @@ -275,7 +275,7 @@ static inline int is_send_done(struct thr_info *tip) */ static inline int is_reap_done(struct thr_info *tip) { - return tip->send_done && tip->naios_out == 0; + return signal_done || (tip->send_done && tip->naios_out == 0); } /** |