am e03abcd6: am 4a7001ca: Merge "Work around C11 const atomic restrictions."

* commit 'e03abcd61b127b10391b8257c35fbe66053e417a':
  Work around C11 const atomic restrictions.
This commit is contained in:
Hans Boehm 2014-09-12 19:28:16 +00:00 committed by Android Git Automerger
commit d898618914
1 changed files with 9 additions and 1 deletions

View File

@ -160,10 +160,18 @@ void BBinder::attachObject(
e->mObjects.attach(objectID, object, cleanupCookie, func);
}
// The C11 standard doesn't allow atomic loads from const fields,
// though C++11 does. Fudge it until standards get straightened out.
static inline uintptr_t load_const_atomic(const atomic_uintptr_t* p,
memory_order mo) {
atomic_uintptr_t* non_const_p = const_cast<atomic_uintptr_t*>(p);
return atomic_load_explicit(non_const_p, mo);
}
void* BBinder::findObject(const void* objectID) const
{
Extras* e = reinterpret_cast<Extras*>(
atomic_load_explicit(&mExtras, memory_order_acquire));
load_const_atomic(&mExtras, memory_order_acquire));
if (!e) return NULL;
AutoMutex _l(e->mLock);