On Mon, Aug 06, 2007 at 07:21:21AM +0930, Dan Shearer wrote:
> On Sun, Aug 05, 2007 at 11:13:55PM +0200, Bernhard Kauer wrote:
> > There are a couple of places in qemu, where abort() is called.
> > The most commonly used one is perhaps cpu_abort() which is called
> > e.g. when a triple fault occures.
> > 
> > As abort() does not call any atexit() function, cleanup is not
> > performed. 
> 
> Tiny correction: abort() and _exit don't call atexit(), however
> unix-like OSs still cleanup memory and file descriptors and other
> transient resources  anyway no matter how the program ended. So lack of
> cleanup isn't quite as big an issue as it might seem.
> 
> > This leaves for example the terminal in a state where
> > the cursor is invisible.
> 
> Non-transient resources such as DSOs and domain sockets are not cleaned
> up by the OS, which accounts for the terminal problem you noticed.

Well, the problem is here that the function term_exit() is never
called, which would restore the terminal state to the old version
via a tcsetattr().


> > Are there any reasons not to use exit(1) in cpu_abort()?
> 
> Speed. I used to use abort() or _exit() for speed, ie they didn't hang
> around while atexit() waited politely for timeouts. I thought if I told
> the program to stop it should stop immediately :-)

I would use a 'kill -TERM' for that.


        Bernhard


Reply via email to