Comment Unlearned lessons. (Score 2) 151
The race occurred in a section of code not labelled unsafe. It was allowed to occur because the principles the borrow checker relies on were violated in a section that was.
This was not because C code had not addressed this challenge; someone thought, with a comment at the unsafe section, they would have safeguards and could take shortcuts. They released the lock guarding access to the mutable reference they held. This would not have occurred if that lock was correctly modelled to hold its contents, as std::sync::Mutex is intended to.
The developer who built the translation layer didn't apply the structural lessons in the standard library.
The claim this is "only a crash" is also wild speculation; memory corruption of this class may have wildly unpredictable effects, including replacing credentials or extracting information. It's detectable when it crashes.
Most notably, the bugfix addressed the final race. It did not address either of these structural weaknesses in the type modelling; meaning while this bug was fixed, the conditions that let it happen by accident were not. This has been the case in each of these publicised rust rewrite bugs I've seen.