File tree Expand file tree Collapse file tree 3 files changed +18
-7
lines changed
include/media/stagefright Expand file tree Collapse file tree 3 files changed +18
-7
lines changed Original file line number Diff line number Diff line change @@ -60,15 +60,20 @@ struct OMXCodec : public MediaSource,
6060
6161 virtual status_t pause ();
6262
63- void on_message (const omx_message &msg);
64-
6563 // from MediaBufferObserver
6664 virtual void signalBufferReturned (MediaBuffer *buffer);
6765
6866protected:
6967 virtual ~OMXCodec ();
7068
7169private:
70+
71+ // Make sure mLock is accessible to OMXCodecObserver
72+ friend class OMXCodecObserver ;
73+
74+ // Call this with mLock hold
75+ void on_message (const omx_message &msg);
76+
7277 enum State {
7378 DEAD,
7479 LOADED,
Original file line number Diff line number Diff line change @@ -234,7 +234,9 @@ struct OMXCodecObserver : public BnOMXObserver {
234234 sp<OMXCodec> codec = mTarget .promote ();
235235
236236 if (codec.get () != NULL ) {
237+ Mutex::Autolock autoLock (codec->mLock );
237238 codec->on_message (msg);
239+ codec.clear ();
238240 }
239241 }
240242
@@ -1672,8 +1674,6 @@ status_t OMXCodec::allocateBuffersOnPort(OMX_U32 portIndex) {
16721674}
16731675
16741676void OMXCodec::on_message (const omx_message &msg) {
1675- Mutex::Autolock autoLock (mLock );
1676-
16771677 switch (msg.type ) {
16781678 case omx_message::EVENT:
16791679 {
Original file line number Diff line number Diff line change @@ -89,6 +89,9 @@ OMX::CallbackDispatcher::~CallbackDispatcher() {
8989 mQueueChanged .signal ();
9090 }
9191
92+ // Don't call join on myself
93+ CHECK (mThread != pthread_self ());
94+
9295 void *dummy;
9396 pthread_join (mThread , &dummy);
9497}
@@ -249,9 +252,12 @@ status_t OMX::freeNode(node_id node) {
249252
250253 status_t err = instance->freeNode (mMaster );
251254
252- index = mDispatchers .indexOfKey (node);
253- CHECK (index >= 0 );
254- mDispatchers .removeItemsAt (index);
255+ {
256+ Mutex::Autolock autoLock (mLock );
257+ index = mDispatchers .indexOfKey (node);
258+ CHECK (index >= 0 );
259+ mDispatchers .removeItemsAt (index);
260+ }
255261
256262 return err;
257263}
You can’t perform that action at this time.
0 commit comments