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;
 }