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