From 652e18fcf0e01a8325d9626b5fc65e669841701b Mon Sep 17 00:00:00 2001 From: "xueman.ruan" Date: Fri, 1 Jul 2022 14:53:21 +0800 Subject: [PATCH] [allocator]: fix dma_heap allocator segment fault happened in mpp_allocator_put. #00 pc 00102e14 /vendor/lib/libmpp.so (mpp_allocator_put+272) #01 pc 0004705c /vendor/lib/libmpp.so (MppBufferService::~MppBufferService()+536) Signed-off-by: xueman.ruan Change-Id: Ia4f9a3b4823bf6a5d8f3fdfd85055630222c0b43 --- osal/android/os_allocator.c | 3 ++- osal/linux/os_allocator.c | 3 ++- osal/mpp_allocator.cpp | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/osal/android/os_allocator.c b/osal/android/os_allocator.c index 62792e50..d1e602fb 100644 --- a/osal/android/os_allocator.c +++ b/osal/android/os_allocator.c @@ -49,7 +49,8 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) allocator_std; } break; case MPP_BUFFER_TYPE_DMA_HEAP: { - *api = allocator_dma_heap; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DMA_HEAP)) ? allocator_dma_heap : + allocator_std; } break; default : { ret = MPP_NOK; diff --git a/osal/linux/os_allocator.c b/osal/linux/os_allocator.c index a7c4d4c7..b8185513 100644 --- a/osal/linux/os_allocator.c +++ b/osal/linux/os_allocator.c @@ -56,7 +56,8 @@ MPP_RET os_allocator_get(os_allocator *api, MppBufferType type) allocator_std; } break; case MPP_BUFFER_TYPE_DMA_HEAP: { - *api = allocator_dma_heap; + *api = (mpp_rt_allcator_is_valid(MPP_BUFFER_TYPE_DMA_HEAP)) ? allocator_dma_heap : + allocator_std; } break; default : { ret = MPP_NOK; diff --git a/osal/mpp_allocator.cpp b/osal/mpp_allocator.cpp index b1895484..25277fc5 100644 --- a/osal/mpp_allocator.cpp +++ b/osal/mpp_allocator.cpp @@ -176,7 +176,11 @@ MPP_RET mpp_allocator_put(MppAllocator *allocator) } MppAllocatorImpl *p = (MppAllocatorImpl *)*allocator; + + if (!p) + return MPP_OK; *allocator = NULL; + if (p->os_api.close && p->ctx) p->os_api.close(p->ctx); pthread_mutex_destroy(&p->lock);