Re: fio 1.22 segfaults when pressing ctrl-c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Nov 18 2008, Jens Axboe wrote:
> On Tue, Nov 18 2008, Erwan Velu wrote:
> > I'm running fio with the surface scan example, and it just segfault and 
> > generate a core if I'm pressing CTRL-C during the test.
> > 
> > [root@max5 examples]# fio surface-scan
> > write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
> > verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
> > Starting 2 threads
> > **** I'm pressing CTRL-C ****
> > fio: terminating on signal 2
> > Quit (core dumped)
> > [root@max5 examples]#
> > 
> > 
> > Then same from gdb:
> > 
> > [root@max5 examples]# gdb --args fio surface-scan
> > GNU gdb Red Hat Linux (6.5-25.el5_1.1rh)
> > Copyright (C) 2006 Free Software Foundation, Inc.
> > GDB is free software, covered by the GNU General Public License, and you are
> > welcome to change it and/or distribute copies of it under certain 
> > conditions.
> > Type "show copying" to see the conditions.
> > There is absolutely no warranty for GDB.  Type "show warranty" for details.
> > This GDB was configured as "x86_64-redhat-linux-gnu"...Using host 
> > libthread_db library "/lib64/libthread_db.so.1".
> > 
> > (gdb) run
> > Starting program: /usr/bin/fio surface-scan
> > [Thread debugging using libthread_db enabled]
> > [New Thread 46912498286832 (LWP 2158)]
> > write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
> > verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
> > Starting 2 threads
> > [New Thread 1084229952 (LWP 2161)]
> > Jobs: 1 (f=1): [WP] [-.-% done] [     0/ 57822 kb/s] [eta 00m:00s]
> > 
> > **** I'm pressing CTRL-C ****
> > 
> > Program received signal SIGINT, Interrupt.
> > [Switching to Thread 46912498286832 (LWP 2158)]
> > 0x0000003c23495511 in nanosleep () from /lib64/libc.so.6
> > (gdb) bt
> > #0  0x0000003c23495511 in nanosleep () from /lib64/libc.so.6
> > #1  0x0000003c234c8554 in usleep () from /lib64/libc.so.6
> > #2  0x0000000000408448 in main (argc=<value optimized out>, argv=<value 
> > optimized out>) at fio.c:1394
> > (gdb)
> 
> Can you recreate with the -O2 removed in the Makefile? That'll get us
> some better debug information. You probably also want to inspect the
> thread that crashed, you are looking at the main process and that just
> mainly sleeps and does status dumps every few seconds.

OK nevermind, it's because of that main thread getting its own SIGQUIT
and not handling it. The below should fix it, I'll release a new version
soon.

diff --git a/fio.c b/fio.c
index 08011c9..2aa8b40 100644
--- a/fio.c
+++ b/fio.c
@@ -116,6 +116,13 @@ static void sig_alrm(int fio_unused sig)
 	}
 }
 
+/*
+ * Happens on thread runs with ctrl-c, ignore our own SIGQUIT
+ */
+static void sig_quit(int sig)
+{
+}
+
 static void sig_int(int sig)
 {
 	if (threads) {
@@ -154,6 +161,11 @@ static void set_sig_handlers(void)
 	act.sa_handler = sig_ill;
 	act.sa_flags = SA_RESTART;
 	sigaction(SIGILL, &act, NULL);
+
+	memset(&act, 0, sizeof(act));
+	act.sa_handler = sig_quit;
+	act.sa_flags = SA_RESTART;
+	sigaction(SIGQUIT, &act, NULL);
 }
 
 static inline int should_check_rate(struct thread_data *td)

-- 
Jens Axboe

--
To unsubscribe from this list: send the line "unsubscribe fio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux