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. > 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 :-) Then I had all sorts of problems to do with persistent shared resources hanging around in strange states so I moved to exit(1). I think (can someone correct me here?) there is another reason to call atexit() for portable programs, and that is that Microsoft OSs aren't as fussy about cleaning up after a program has exited. -- Dan Shearer [EMAIL PROTECTED]