Fix two data races in the monitor code.

First, the release of a lock was not preceded by a memory barrier.
This would allow stores within the critical section to move outside
the critical section violating the monitor invariant.

Second, the thin lock value was often not loaded through volatile
pointer.  This provides the compiler with the freedom to reload the
thin lock with a different value causing erroneous updates to the lock
word.

Bug: 5107390
1 file changed