summaryrefslogtreecommitdiffstats
path: root/libs/rs
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-10-15 11:21:24 -0700
committerJason Sams <rjsams@android.com>2010-10-15 11:21:24 -0700
commit0d2b2d5e13ef4dcff89a28b4d6b25d5f0a05b96d (patch)
tree97af93d20e909165ad7c8f766b156ab0a517ffdf /libs/rs
parent9c25aee52672f9c8908e062bde502341c189970e (diff)
downloadframeworks_base-0d2b2d5e13ef4dcff89a28b4d6b25d5f0a05b96d.zip
frameworks_base-0d2b2d5e13ef4dcff89a28b4d6b25d5f0a05b96d.tar.gz
frameworks_base-0d2b2d5e13ef4dcff89a28b4d6b25d5f0a05b96d.tar.bz2
Fix deadlock on RS teardown.
Change-Id: I34d2702b535e28e9519c7368fd8a942bfe0724bc
Diffstat (limited to 'libs/rs')
-rw-r--r--libs/rs/rsObjectBase.cpp12
1 files changed, 3 insertions, 9 deletions
diff --git a/libs/rs/rsObjectBase.cpp b/libs/rs/rsObjectBase.cpp
index e4b07c4..46b1750 100644
--- a/libs/rs/rsObjectBase.cpp
+++ b/libs/rs/rsObjectBase.cpp
@@ -93,9 +93,8 @@ bool ObjectBase::checkDelete() const
if (mRSC && mRSC->props.mLogObjects) {
dumpLOGV("checkDelete");
}
- delete this;
-
unlockUserRef();
+ delete this;
return true;
}
return false;
@@ -170,9 +169,7 @@ void ObjectBase::add() const
void ObjectBase::remove() const
{
- // Should be within gObjectInitMutex lock
- // lock will be from checkDelete a few levels up in the stack.
-
+ lockUserRef();
//LOGV("calling remove rsc %p", mRSC);
if (!mRSC) {
rsAssert(!mPrev);
@@ -191,12 +188,11 @@ void ObjectBase::remove() const
}
mPrev = NULL;
mNext = NULL;
+ unlockUserRef();
}
void ObjectBase::zeroAllUserRef(Context *rsc)
{
- lockUserRef();
-
if (rsc->props.mLogObjects) {
LOGV("Forcing release of all outstanding user refs.");
}
@@ -219,8 +215,6 @@ void ObjectBase::zeroAllUserRef(Context *rsc)
LOGV("Objects remaining.");
dumpAll(rsc);
}
-
- unlockUserRef();
}
void ObjectBase::dumpAll(Context *rsc)