Loading libs/binder/IPCThreadState.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -489,14 +489,16 @@ void IPCThreadState::flushCommands() bool IPCThreadState::flushIfNeeded() { if (mIsLooper || mServingStackPointer != nullptr) { if (mIsLooper || mServingStackPointer != nullptr || mIsFlushing) { return false; } mIsFlushing = true; // In case this thread is not a looper and is not currently serving a binder transaction, // there's no guarantee that this thread will call back into the kernel driver any time // soon. Therefore, flush pending commands such as BC_FREE_BUFFER, to prevent them from getting // stuck in this thread's out buffer. flushCommands(); mIsFlushing = false; return true; } Loading Loading @@ -852,10 +854,10 @@ IPCThreadState::IPCThreadState() mWorkSource(kUnsetWorkSource), mPropagateWorkSource(false), mIsLooper(false), mIsFlushing(false), mStrictModePolicy(0), mLastTransactionBinderFlags(0), mCallRestriction(mProcess->mCallRestriction) { mCallRestriction(mProcess->mCallRestriction) { pthread_setspecific(gTLS, this); clearCaller(); mIn.setDataCapacity(256); Loading libs/binder/include/binder/IPCThreadState.h +1 −0 Original line number Diff line number Diff line Loading @@ -212,6 +212,7 @@ private: // Whether the work source should be propagated. bool mPropagateWorkSource; bool mIsLooper; bool mIsFlushing; int32_t mStrictModePolicy; int32_t mLastTransactionBinderFlags; CallRestriction mCallRestriction; Loading Loading
libs/binder/IPCThreadState.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -489,14 +489,16 @@ void IPCThreadState::flushCommands() bool IPCThreadState::flushIfNeeded() { if (mIsLooper || mServingStackPointer != nullptr) { if (mIsLooper || mServingStackPointer != nullptr || mIsFlushing) { return false; } mIsFlushing = true; // In case this thread is not a looper and is not currently serving a binder transaction, // there's no guarantee that this thread will call back into the kernel driver any time // soon. Therefore, flush pending commands such as BC_FREE_BUFFER, to prevent them from getting // stuck in this thread's out buffer. flushCommands(); mIsFlushing = false; return true; } Loading Loading @@ -852,10 +854,10 @@ IPCThreadState::IPCThreadState() mWorkSource(kUnsetWorkSource), mPropagateWorkSource(false), mIsLooper(false), mIsFlushing(false), mStrictModePolicy(0), mLastTransactionBinderFlags(0), mCallRestriction(mProcess->mCallRestriction) { mCallRestriction(mProcess->mCallRestriction) { pthread_setspecific(gTLS, this); clearCaller(); mIn.setDataCapacity(256); Loading
libs/binder/include/binder/IPCThreadState.h +1 −0 Original line number Diff line number Diff line Loading @@ -212,6 +212,7 @@ private: // Whether the work source should be propagated. bool mPropagateWorkSource; bool mIsLooper; bool mIsFlushing; int32_t mStrictModePolicy; int32_t mLastTransactionBinderFlags; CallRestriction mCallRestriction; Loading