Merge "Add incUserRef() for ScriptGroup/ScriptKernelID/ScriptFieldID." into jb-mr2-dev
diff --git a/rsObjectBase.cpp b/rsObjectBase.cpp
index 17064a5..f864bac 100644
--- a/rsObjectBase.cpp
+++ b/rsObjectBase.cpp
@@ -133,11 +133,8 @@
bool ObjectBase::zeroUserRef() const {
//ALOGV("ObjectBase %p zeroU ref %i, %i", this, mUserRefCount, mSysRefCount);
__sync_and_and_fetch(&mUserRefCount, 0);
- if ((__sync_fetch_and_sub(&mUserRefCount, 1) <= 1)) {
- __sync_synchronize();
- if (mSysRefCount <= 0) {
- return checkDelete(this);
- }
+ if (mSysRefCount <= 0) {
+ return checkDelete(this);
}
return false;
}
diff --git a/rsScript.cpp b/rsScript.cpp
index f2fc5ba..a12505c 100644
--- a/rsScript.cpp
+++ b/rsScript.cpp
@@ -129,11 +129,15 @@
namespace renderscript {
RsScriptKernelID rsi_ScriptKernelIDCreate(Context *rsc, RsScript vs, int slot, int sig) {
- return new ScriptKernelID(rsc, (Script *)vs, slot, sig);
+ ScriptKernelID *kid = new ScriptKernelID(rsc, (Script *)vs, slot, sig);
+ kid->incUserRef();
+ return kid;
}
RsScriptFieldID rsi_ScriptFieldIDCreate(Context *rsc, RsScript vs, int slot) {
- return new ScriptFieldID(rsc, (Script *)vs, slot);
+ ScriptFieldID *fid = new ScriptFieldID(rsc, (Script *)vs, slot);
+ fid->incUserRef();
+ return fid;
}
void rsi_ScriptBindAllocation(Context * rsc, RsScript vs, RsAllocation va, uint32_t slot) {
diff --git a/rsScriptGroup.cpp b/rsScriptGroup.cpp
index f157fee..55acf23 100644
--- a/rsScriptGroup.cpp
+++ b/rsScriptGroup.cpp
@@ -249,6 +249,7 @@
if (rsc->mHal.funcs.scriptgroup.init) {
rsc->mHal.funcs.scriptgroup.init(rsc, sg);
}
+ sg->incUserRef();
return sg;
}