This patch helps a lot. I couldn't even get through an install before.
But please don't remove qemu-old yet: I'm using UDP multicast sockets to
build virtual networks, and they fail on  0.13.0:

$ sudo qemu -m 128 -no-fd-bootchk \
        -hda virtual.img -boot n -nographic \
        -net nic,vlan=0,model=rtl8139,macaddr=52:54:00:12:34:03 \
        -net user -tftp /usr/src/sys/arch/i386/compile/TEST -bootp pxeboot \
        -net nic,vlan=1,model=rtl8139,macaddr=52:54:00:23:03:01 \
        -net tap,vlan=1,script=no \
        -net nic,vlan=3,model=rtl8139,macaddr=52:54:00:23:03:03 \
        -net socket,vlan=3,mcast=230.0.0.1:10003 
setsockopt(SOL_IP, IP_MULTICAST_LOOP): Invalid argument
qemu: -net socket,vlan=3,mcast=230.0.0.1:10003: Device 'socket' could not be 
initialized

Works fine if I comment out the last two lines.


On Fri, Jan 21, 2011 at 12:18:28PM +0100, Stefan Sperling wrote:
> I've run into a qemu crash with the following trace:
> 
> #0  _thread_kern_sig_undefer ()
>     at /usr/src/lib/libpthread/uthread/uthread_kern.c:1003
> 1003            if (curthread->sig_defer_count > 1) {
> (gdb) p curthread
> $1 = (struct pthread *) 0x8
> (gdb) bt
> #0  _thread_kern_sig_undefer ()
>     at /usr/src/lib/libpthread/uthread/uthread_kern.c:1003
> #1  0x0000000209fbb039 in _thread_kern_sig_defer ()
>     at /usr/src/lib/libpthread/uthread/uthread_kern.c:988
> #2  0x0000000209fb6d82 in _thread_fd_unlock (fd=Variable "fd" is not 
> available.
> )
>     at /usr/src/lib/libpthread/uthread/uthread_fd.c:568
> #3  0x0000000209fb5a14 in write (fd=121237504, buf=0x651d90, nbytes=8)
>     at /usr/src/lib/libpthread/uthread/uthread_write.c:170
> #4  0x00000000004070af in ?? ()
> #5  0x0000000000423b61 in ?? ()
> #6  0x0000000209fbcb06 in _dispatch_signal (sig=31, scp=0x202612ac0)
>     at /usr/src/lib/libpthread/uthread/uthread_sig.c:400
> #7  0x0000000209fbcbe3 in _dispatch_signals (scp=0x202612ac0)
>     at /usr/src/lib/libpthread/uthread/uthread_sig.c:429
> #8  0x0000000209fbd31d in _thread_sig_handler (sig=14, info=0x202612ba0, 
>     scp=0x202612ac0) at /usr/src/lib/libpthread/uthread/uthread_sig.c:139
> #9  0x0000000202612ac0 in ?? ()
> #10 0x000000020739f190 in ?? ()
> #11 0x000000020739f000 in ?? ()
> #12 0x0000000000000004 in ?? ()
> #13 0x000000004d38f2e5 in ?? ()
> #14 0x00000000
> 
> Note that call to write() which gets a bogus fd.
> This fd is io_thread_fd in the patch below.
> 
> This seems to help stability here.
> It would be interesting to know if this helps others who have seen qemu crash.
> 
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/emulators/qemu/Makefile,v
> retrieving revision 1.59
> diff -u -p -r1.59 Makefile
> --- Makefile  22 Nov 2010 11:32:01 -0000      1.59
> +++ Makefile  21 Jan 2011 09:28:07 -0000
> @@ -6,6 +6,7 @@ ONLY_FOR_ARCHS =      i386 amd64 sparc64
>  COMMENT =            multi system emulator
>  
>  DISTNAME =           qemu-0.13.0
> +REVISION =           0
>  CATEGORIES =         emulators
>  
>  HOMEPAGE =           http://www.qemu.org/
> Index: patches/patch-cpus_c
> ===================================================================
> RCS file: patches/patch-cpus_c
> diff -N patches/patch-cpus_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-cpus_c      21 Jan 2011 09:27:20 -0000
> @@ -0,0 +1,12 @@
> +$OpenBSD$
> +--- cpus.c.orig      Fri Jan 21 10:24:52 2011
> ++++ cpus.c   Fri Jan 21 10:26:29 2011
> +@@ -149,7 +149,7 @@ static void cpu_debug_handler(CPUState *env)
> + }
> + 
> + #ifndef _WIN32
> +-static int io_thread_fd = -1;
> ++static volatile sig_atomic_t io_thread_fd = -1;
> + 
> + static void qemu_event_increment(void)
> + {
> Index: patches/patch-net_h
> ===================================================================
> RCS file: /cvs/ports/emulators/qemu/patches/patch-net_h,v
> retrieving revision 1.1
> diff -u -p -r1.1 patch-net_h
> --- patches/patch-net_h       27 May 2010 17:55:05 -0000      1.1
> +++ patches/patch-net_h       21 Jan 2011 09:27:19 -0000
> @@ -1,7 +1,7 @@
>  $OpenBSD: patch-net_h,v 1.1 2010/05/27 17:55:05 fgsch Exp $
> ---- net.h.orig       Tue Feb 23 20:54:38 2010
> -+++ net.h    Mon Mar 22 20:26:50 2010
> -@@ -172,7 +172,7 @@ void net_host_device_remove(Monitor *mon, const QDict 
> +--- net.h.orig       Fri Oct 15 22:56:09 2010
> ++++ net.h    Fri Jan 21 10:04:46 2011
> +@@ -172,7 +172,7 @@ int do_netdev_del(Monitor *mon, const QDict *qdict, QO
>   #ifdef __sun__
>   #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
>   #else
> Index: patches/patch-posix-aio-compat_c
> ===================================================================
> RCS file: patches/patch-posix-aio-compat_c
> diff -N patches/patch-posix-aio-compat_c
> --- /dev/null 1 Jan 1970 00:00:00 -0000
> +++ patches/patch-posix-aio-compat_c  21 Jan 2011 09:27:20 -0000
> @@ -0,0 +1,12 @@
> +$OpenBSD$
> +--- posix-aio-compat.c.orig  Fri Jan 21 10:27:04 2011
> ++++ posix-aio-compat.c       Fri Jan 21 10:15:20 2011
> +@@ -495,7 +495,7 @@ static int posix_aio_flush(void *opaque)
> +     return !!s->first_aio;
> + }
> + 
> +-static PosixAioState *posix_aio_state;
> ++static volatile PosixAioState *posix_aio_state;
> + 
> + static void aio_signal_handler(int signum)
> + {
> Index: patches/patch-qemu-options_hx
> ===================================================================
> RCS file: /cvs/ports/emulators/qemu/patches/patch-qemu-options_hx,v
> retrieving revision 1.1
> diff -u -p -r1.1 patch-qemu-options_hx
> --- patches/patch-qemu-options_hx     27 May 2010 17:55:05 -0000      1.1
> +++ patches/patch-qemu-options_hx     21 Jan 2011 09:27:19 -0000
> @@ -1,7 +1,7 @@
>  $OpenBSD: patch-qemu-options_hx,v 1.1 2010/05/27 17:55:05 fgsch Exp $
> ---- qemu-options.hx.orig     Tue Feb 23 20:54:38 2010
> -+++ qemu-options.hx  Mon Mar 22 20:26:50 2010
> -@@ -942,7 +942,7 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS} (Windo
> +--- qemu-options.hx.orig     Fri Oct 15 22:56:09 2010
> ++++ qemu-options.hx  Fri Jan 21 10:04:46 2011
> +@@ -1105,7 +1105,7 @@ or @file{C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS} (Windo
>   Then @file{@var{dir}} can be accessed in @file{\\smbserver\qemu}.
>   
>   Note that a SAMBA server must be installed on the host OS in
> 

-- 

Reply via email to