[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] Re: [PATCH] Fix freezing bug in curses console
From: |
andrzej zaborowski |
Subject: |
Re: [Qemu-devel] Re: [PATCH] Fix freezing bug in curses console |
Date: |
Fri, 27 Feb 2009 22:01:27 +0100 |
2009/2/27 Anthony Liguori <address@hidden>:
> Matthew Bloch wrote:
>>
>> Hi there,
>>
>> We are running lots of kvm processes in screen and found that about 1 in
>> 5 froze shortly after startup startup with a backtrace like this one:
>>
>> #0 0xf7c7fcd9 in pthread_exit () from /lib/tls/libc.so.6
>> #1 0xf7cfbe62 in wresize () from /lib/libncurses.so.5
>> #2 0xf7cfb7ab in is_term_resized () from /lib/libncurses.so.5
>> #3 0xf7cfb877 in is_term_resized () from /lib/libncurses.so.5
>> #4 0xf7cfba31 in resize_term () from /lib/libncurses.so.5
>> #5 0x080d3dd9 in vga_init ()
>> #6 <signal handler called>
>> #7 0xf7c0da5b in free () from /lib/tls/libc.so.6
>> #8 0xf7c0effe in calloc () from /lib/tls/libc.so.6
>> #9 0xf7cf222e in newpad () from /lib/libncurses.so.5
>> #10 0x080d3549 in vga_init ()
>>
>> We're just using the lenny version of kvm from 2008-12-16.
>>
>> On casual inspection, the SIGWINCH signal handling looked ropey to me -
>> grandpa always told me not to do any real work in a signal handler, and
>> the backtrace suggested re-entrancy problems in curses, so I changed the
>> behaviour to set a flag and do the work in the main loop instead. Maybe
>> I'm reading the backtrace wrong.
>>
>> So far that means that when you resize the window, the display is
>> corrupt until the VM outputs some text, or the user hits a key. But I
>> think it has solved the freezing / crashing bug too - would appreciate
>> any comments on my analysis or proposed solution.
>>
>
> It's racy with select(). A better fix would be to create a pipe and write
> to that pipe in the SIGWINCH handler. You should then register an io
> callback using qemu_set_fd_handler2() that does the actions for SIGWINCH.
Maybe a bottom half would work? The scheduling of a bh shouldn't
constitute "real work".
Cheers