From cee0762db9e2edfb25c481e8d25f0b5b601be69f Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Fri, 7 May 2021 15:58:04 +0800 Subject: [PATCH] [mpp_mem_pool]: Fix destruction error on Android The Mutex is destroyed before MppMemService. Use get_lock() to avoid it. Change-Id: Iba5852280ee2e5804fdfa45da008500fb1dc9225 Signed-off-by: Herman Chen --- mpp/base/mpp_mem_pool.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mpp/base/mpp_mem_pool.cpp b/mpp/base/mpp_mem_pool.cpp index 8f2f0cbb..161ab274 100644 --- a/mpp/base/mpp_mem_pool.cpp +++ b/mpp/base/mpp_mem_pool.cpp @@ -48,10 +48,15 @@ class MppMemPoolService { public: static MppMemPoolService* getInstance() { - AutoMutex auto_lock(mLock); + AutoMutex auto_lock(get_lock()); static MppMemPoolService pool_service; return &pool_service; } + static Mutex *get_lock() { + static Mutex lock; + return &lock; + } + MppMemPoolImpl *get_pool(size_t size); void put_pool(MppMemPoolImpl *impl); @@ -59,11 +64,8 @@ private: MppMemPoolService(); ~MppMemPoolService(); struct list_head mLink; - static Mutex mLock; }; -Mutex MppMemPoolService::mLock; - MppMemPoolService::MppMemPoolService() { INIT_LIST_HEAD(&mLink); @@ -100,7 +102,7 @@ MppMemPoolImpl *MppMemPoolService::get_pool(size_t size) INIT_LIST_HEAD(&pool->used); INIT_LIST_HEAD(&pool->unused); INIT_LIST_HEAD(&pool->service_link); - AutoMutex auto_lock(mLock); + AutoMutex auto_lock(get_lock()); list_add_tail(&pool->service_link, &mLink); return pool; @@ -136,7 +138,7 @@ void MppMemPoolService::put_pool(MppMemPoolImpl *impl) mpp_assert(!impl->unused_count); { - AutoMutex auto_lock(mLock); + AutoMutex auto_lock(get_lock()); list_del_init(&impl->service_link); }