diff options
author | Jason Sams <rjsams@android.com> | 2010-10-15 11:21:24 -0700 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2010-10-15 11:21:24 -0700 |
commit | 0d2b2d5e13ef4dcff89a28b4d6b25d5f0a05b96d (patch) | |
tree | 97af93d20e909165ad7c8f766b156ab0a517ffdf /libs/rs | |
parent | 9c25aee52672f9c8908e062bde502341c189970e (diff) | |
download | frameworks_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.cpp | 12 |
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) |