
On Aug 23, 2005, at 4:50 AM, Ben Artin wrote:
I consider this a pretty serious error, and that I think we should understand how it came to pass.
The technical cause of the error is that there was an unforeseen conflict between the CodeWarrior compiler's register allocation scheme, and the original code, but only when the original was actually inlined (the conflict disappeared with inlining off as might have easily happened in a debug run). The bug had nothing to do with multithreading or memory barriers per say, just that these issues were what was being implemented. The fix was to avoid explicitly naming registers in the assembly, allowing the compiler to allocate registers at will with no chance for conflict. The bug was first detected (to my knowledge) by John Daub on Aug. 10. I learned about it on Aug. 12, but was not able to look at it, diagnose it, and suggest a fix until Aug. 15. <shrug> bugs happen. Bugs of this nature won't be eradicated unless you outlaw dropping into assembly (and I don't recommend that). Perhaps an extended public beta of boost releases (all compressed and easy to download) might help? -Howard