|
Message-ID: <20121217165829.GT20323@brightrain.aerifal.cx> Date: Mon, 17 Dec 2012 11:58:29 -0500 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: LLVM testsuite, close-stderr.ll hangs On Mon, Dec 17, 2012 at 03:03:39PM +0400, ojab wrote: > On glibc this command exits with code 1, on musl it hangs. strace > output can be found in the attached files. > [...] > 28321 write(2, "LLVM ERROR: IO failure on output stream.\n", 41) = -1 EBADF (Bad file number) > 28321 pause( The only way pause() is called from exit() is when the exit lock is already held. There are 3 basic ways this could happen: 1. Memory corruption that overwrote the lock variable. 2. Another thread holding the lock indefinitely (e.g. deadlock an an atexit handler). 3. Recursive call to exit (i.e. calling exit from an atexit handler or a signal handler. Since I don't see any threads in the strace, I'm ruling out #2. #1 is definitely an option, but I suspect what's going on is #3, in which case it's an llvm bug. Calling exit more than once is undefined behavior; in particular, atexit handlers or global destructors cannot call exit. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.