Add x86 server support.
Change-Id: I674acaf15b67afa48bc736f72942a11e2e38e940
diff --git a/rsObjectBase.cpp b/rsObjectBase.cpp
index 162f162..b66bb73 100644
--- a/rsObjectBase.cpp
+++ b/rsObjectBase.cpp
@@ -69,12 +69,12 @@
}
void ObjectBase::incUserRef() const {
- android_atomic_inc(&mUserRefCount);
+ __sync_fetch_and_add(&mUserRefCount, 1);
//ALOGV("ObjectBase %p incU ref %i, %i", this, mUserRefCount, mSysRefCount);
}
void ObjectBase::incSysRef() const {
- android_atomic_inc(&mSysRefCount);
+ __sync_fetch_and_add(&mSysRefCount, 1);
//ALOGV("ObjectBase %p incS ref %i, %i", this, mUserRefCount, mSysRefCount);
}
@@ -118,18 +118,23 @@
#endif
- if ((android_atomic_dec(&mUserRefCount) <= 1) &&
- (android_atomic_acquire_load(&mSysRefCount) <= 0)) {
- return checkDelete(this);
+ if ((__sync_fetch_and_sub(&mUserRefCount, 1) <= 1)) {
+ __sync_synchronize();
+ if (mSysRefCount <= 0) {
+ return checkDelete(this);
+ }
}
return false;
}
bool ObjectBase::zeroUserRef() const {
//ALOGV("ObjectBase %p zeroU ref %i, %i", this, mUserRefCount, mSysRefCount);
- android_atomic_acquire_store(0, &mUserRefCount);
- if (android_atomic_acquire_load(&mSysRefCount) <= 0) {
- return checkDelete(this);
+ __sync_and_and_fetch(&mUserRefCount, 0);
+ if ((__sync_fetch_and_sub(&mUserRefCount, 1) <= 1)) {
+ __sync_synchronize();
+ if (mSysRefCount <= 0) {
+ return checkDelete(this);
+ }
}
return false;
}
@@ -137,9 +142,11 @@
bool ObjectBase::decSysRef() const {
//ALOGV("ObjectBase %p decS ref %i, %i", this, mUserRefCount, mSysRefCount);
rsAssert(mSysRefCount > 0);
- if ((android_atomic_dec(&mSysRefCount) <= 1) &&
- (android_atomic_acquire_load(&mUserRefCount) <= 0)) {
- return checkDelete(this);
+ if ((__sync_fetch_and_sub(&mSysRefCount, 1) <= 1)) {
+ __sync_synchronize();
+ if (mUserRefCount <= 0) {
+ return checkDelete(this);
+ }
}
return false;
}