diff options
Diffstat (limited to 'runtime/art_method.h')
| -rw-r--r-- | runtime/art_method.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/runtime/art_method.h b/runtime/art_method.h index b38508b757..11dcc35df5 100644 --- a/runtime/art_method.h +++ b/runtime/art_method.h @@ -95,18 +95,20 @@ class ArtMethod FINAL { // This setter guarantees atomicity. void AddAccessFlags(uint32_t flag) { - uint32_t old_access_flags = access_flags_.load(std::memory_order_relaxed); + uint32_t old_access_flags; uint32_t new_access_flags; do { + old_access_flags = access_flags_.load(std::memory_order_relaxed); new_access_flags = old_access_flags | flag; } while (!access_flags_.compare_exchange_weak(old_access_flags, new_access_flags)); } // This setter guarantees atomicity. void ClearAccessFlags(uint32_t flag) { - uint32_t old_access_flags = access_flags_.load(std::memory_order_relaxed); + uint32_t old_access_flags; uint32_t new_access_flags; do { + old_access_flags = access_flags_.load(std::memory_order_relaxed); new_access_flags = old_access_flags & ~flag; } while (!access_flags_.compare_exchange_weak(old_access_flags, new_access_flags)); } |