From e31839cc74c9cd7f480a4e2813d64a17e88e3cfe Mon Sep 17 00:00:00 2001 From: Herman Chen Date: Mon, 16 Jun 2025 16:49:50 +0800 Subject: [PATCH] refactor[mpp_mem_pool]: Add exit leak pool print 1. Refactor caller parameter on pool functions. 2. Add name on pool init. 3. Add exit leak pool print. Signed-off-by: Herman Chen Change-Id: I39a8a966db895340a9e01ddff3a7894f1ca4b825 --- kmpp/base/kmpp_obj.c | 8 +++--- mpp/base/mpp_buffer_impl.cpp | 26 +++++++++--------- mpp/base/mpp_frame.cpp | 6 ++--- mpp/base/mpp_packet.cpp | 6 ++--- mpp/base/mpp_sys_cfg.cpp | 6 ++--- mpp/codec/dec/h264/h264d_api.c | 4 +-- mpp/codec/dec/h264/h264d_dpb.c | 8 +++--- mpp/codec/dec/h264/h264d_init.c | 2 +- mpp/codec/dec/h265/h265d_parser.c | 12 ++++----- mpp/codec/dec/h265/h265d_ps.c | 16 +++++------ mpp/codec/mpp_dec.cpp | 6 ++--- mpp/codec/mpp_dec_normal.cpp | 4 +-- osal/driver/mpp_server.c | 16 +++++------ osal/driver/mpp_service.c | 2 +- osal/inc/mpp_mem_pool.h | 16 +++++------ osal/mpp_mem_pool.c | 44 +++++++++++++++++-------------- osal/test/mpp_mem_pool_test.c | 14 +++++----- 17 files changed, 100 insertions(+), 96 deletions(-) diff --git a/kmpp/base/kmpp_obj.c b/kmpp/base/kmpp_obj.c index c52e04fe..31ce7a12 100644 --- a/kmpp/base/kmpp_obj.c +++ b/kmpp/base/kmpp_obj.c @@ -440,7 +440,7 @@ rk_s32 kmpp_objdef_put(KmppObjDef def) impl->trie = NULL; } if (impl->pool) { - mpp_mem_pool_deinit(impl->pool); + mpp_mem_pool_deinit_f(impl->pool); impl->pool = NULL; } mpp_free(impl); @@ -548,7 +548,7 @@ rk_s32 kmpp_objdef_add_entry(KmppObjDef def, const char *name, KmppEntry *tbl) obj_dbg_entry("objdef %-16s entry size %4d buf size %4d -> %4d\n", impl->name, impl->entry_size, old_size, impl->buf_size); - impl->pool = mpp_mem_pool_init(impl->buf_size); + impl->pool = mpp_mem_pool_init_f(impl->name, impl->buf_size); if (!impl->pool) { mpp_loge_f("get mem pool size %d failed\n", impl->buf_size); ret = rk_nok; @@ -795,7 +795,7 @@ rk_s32 kmpp_obj_get(KmppObj *obj, KmppObjDef def, const char *caller) /* userspace objdef path */ if (def_impl->buf_size) { if (def_impl->pool) - impl = mpp_mem_pool_get_f(caller, def_impl->pool); + impl = mpp_mem_pool_get(def_impl->pool, caller); else impl = mpp_calloc_size(KmppObjImpl, def_impl->buf_size); @@ -975,7 +975,7 @@ rk_s32 kmpp_obj_put(KmppObj obj, const char *caller) def->deinit(impl->entry, caller); if (def->pool) { - mpp_mem_pool_put_f(caller, def->pool, impl); + mpp_mem_pool_put(def->pool, impl, caller); return rk_ok; } } diff --git a/mpp/base/mpp_buffer_impl.cpp b/mpp/base/mpp_buffer_impl.cpp index 34578036..c69852dc 100644 --- a/mpp/base/mpp_buffer_impl.cpp +++ b/mpp/base/mpp_buffer_impl.cpp @@ -121,9 +121,9 @@ static const char *ops2str[BUF_OPS_BUTT] = { "buf destroy", }; -static MppMemPool mpp_buffer_pool = mpp_mem_pool_init_f(MODULE_TAG, sizeof(MppBufferImpl)); -static MppMemPool mpp_buf_grp_pool = mpp_mem_pool_init_f("mpp_buf_grp", sizeof(MppBufferGroupImpl)); -static MppMemPool mpp_buf_map_node_pool = mpp_mem_pool_init_f("mpp_buf_map_node", sizeof(MppDevBufMapNode)); +static MppMemPool mpp_buffer_pool = mpp_mem_pool_init(MODULE_TAG, sizeof(MppBufferImpl), NULL); +static MppMemPool mpp_buf_grp_pool = mpp_mem_pool_init("mpp_buf_grp", sizeof(MppBufferGroupImpl), NULL); +static MppMemPool mpp_buf_map_node_pool = mpp_mem_pool_init("mpp_buf_map_node", sizeof(MppDevBufMapNode), NULL); RK_U32 mpp_buffer_debug = 0; @@ -322,7 +322,7 @@ static MPP_RET put_buffer(MppBufferGroupImpl *group, MppBufferImpl *buffer, /* remove buffer from group */ mpp_dev_ioctl(dev, MPP_DEV_DETACH_FD, pos); mpp_dev_ioctl(dev, MPP_DEV_UNLOCK_MAP, NULL); - mpp_mem_pool_put_f(caller, mpp_buf_map_node_pool, pos); + mpp_mem_pool_put(mpp_buf_map_node_pool, pos, caller); } /* release buffer here */ @@ -332,7 +332,7 @@ static MPP_RET put_buffer(MppBufferGroupImpl *group, MppBufferImpl *buffer, func(buffer->allocator, &info); - mpp_mem_pool_put_f(caller, mpp_buffer_pool, buffer); + mpp_mem_pool_put(mpp_buffer_pool, buffer, caller); return MPP_OK; } @@ -409,7 +409,7 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller, goto RET; } - p = (MppBufferImpl *)mpp_mem_pool_get_f(caller, mpp_buffer_pool); + p = (MppBufferImpl *)mpp_mem_pool_get(mpp_buffer_pool, caller); if (NULL == p) { mpp_err_f("failed to allocate context\n"); ret = MPP_ERR_MALLOC; @@ -421,7 +421,7 @@ MPP_RET mpp_buffer_create(const char *tag, const char *caller, ret = func(group->allocator, info); if (ret) { mpp_err_f("failed to create buffer with size %d\n", info->size); - mpp_mem_pool_put_f(caller, mpp_buffer_pool, p); + mpp_mem_pool_put(mpp_buffer_pool, p, caller); ret = MPP_ERR_MALLOC; goto RET; } @@ -674,7 +674,7 @@ static MppDevBufMapNode *mpp_buffer_attach_dev_lock(const char *caller, MppBuffe } } - node = (MppDevBufMapNode *)mpp_mem_pool_get_f(caller, mpp_buf_map_node_pool); + node = (MppDevBufMapNode *)mpp_mem_pool_get(mpp_buf_map_node_pool, caller); if (!node) { mpp_err("mpp_buffer_attach_dev failed to allocate map node\n"); ret = MPP_NOK; @@ -691,7 +691,7 @@ static MppDevBufMapNode *mpp_buffer_attach_dev_lock(const char *caller, MppBuffe ret = mpp_dev_ioctl(dev, MPP_DEV_ATTACH_FD, node); if (ret) { - mpp_mem_pool_put_f(caller, mpp_buf_map_node_pool, node); + mpp_mem_pool_put(mpp_buf_map_node_pool, node, caller); node = NULL; goto DONE; } @@ -725,7 +725,7 @@ MPP_RET mpp_buffer_detach_dev_f(const char *caller, MppBuffer buffer, MppDev dev if (pos->dev == dev) { list_del_init(&pos->list_buf); ret = mpp_dev_ioctl(dev, MPP_DEV_DETACH_FD, pos); - mpp_mem_pool_put_f(caller, mpp_buf_map_node_pool, pos); + mpp_mem_pool_put(mpp_buf_map_node_pool, pos, caller); break; } } @@ -1043,7 +1043,7 @@ MppBufferGroupImpl *MppBufferService::get_group(const char *tag, const char *cal return NULL; } - p = (MppBufferGroupImpl *)mpp_mem_pool_get_f(caller, mpp_buf_grp_pool); + p = (MppBufferGroupImpl *)mpp_mem_pool_get(mpp_buf_grp_pool, caller); if (!p) { mpp_err("MppBufferService failed to allocate group context\n"); return NULL; @@ -1078,7 +1078,7 @@ MppBufferGroupImpl *MppBufferService::get_group(const char *tag, const char *cal } if (!p->allocator || !p->alloc_api) { - mpp_mem_pool_put_f(caller, mpp_buf_grp_pool, p); + mpp_mem_pool_put(mpp_buf_grp_pool, p, caller); mpp_err("MppBufferService get_group failed to get allocater with mode %d type %x\n", mode, type); return NULL; } @@ -1231,7 +1231,7 @@ void MppBufferService::destroy_group(MppBufferGroupImpl *group) buf_logs_deinit(group->logs); group->logs = NULL; } - mpp_mem_pool_put(mpp_buf_grp_pool, group); + mpp_mem_pool_put_f(mpp_buf_grp_pool, group); group_count--; if (id == misc[mode][type][flag]) { diff --git a/mpp/base/mpp_frame.cpp b/mpp/base/mpp_frame.cpp index 78a10d6c..79bc8f8c 100644 --- a/mpp/base/mpp_frame.cpp +++ b/mpp/base/mpp_frame.cpp @@ -26,7 +26,7 @@ #include "mpp_mem_pool.h" static const char *module_name = MODULE_TAG; -static MppMemPool mpp_frame_pool = mpp_mem_pool_init_f(module_name, sizeof(MppFrameImpl)); +static MppMemPool mpp_frame_pool = mpp_mem_pool_init(module_name, sizeof(MppFrameImpl), NULL); static void setup_mpp_frame_name(MppFrameImpl *frame) { @@ -60,7 +60,7 @@ MPP_RET mpp_frame_init(MppFrame *frame) return MPP_ERR_NULL_PTR; } - MppFrameImpl *p = (MppFrameImpl*)mpp_mem_pool_get(mpp_frame_pool); + MppFrameImpl *p = (MppFrameImpl*)mpp_mem_pool_get_f(mpp_frame_pool); if (NULL == p) { mpp_err_f("malloc failed\n"); return MPP_ERR_NULL_PTR; @@ -90,7 +90,7 @@ MPP_RET mpp_frame_deinit(MppFrame *frame) if (p->stopwatch) mpp_stopwatch_put(p->stopwatch); - mpp_mem_pool_put(mpp_frame_pool, *frame); + mpp_mem_pool_put_f(mpp_frame_pool, *frame); *frame = NULL; return MPP_OK; } diff --git a/mpp/base/mpp_packet.cpp b/mpp/base/mpp_packet.cpp index 8f263372..c8a5fe68 100644 --- a/mpp/base/mpp_packet.cpp +++ b/mpp/base/mpp_packet.cpp @@ -24,7 +24,7 @@ #include "mpp_meta_impl.h" static const char *module_name = MODULE_TAG; -static MppMemPool mpp_packet_pool = mpp_mem_pool_init_f(module_name, sizeof(MppPacketImpl)); +static MppMemPool mpp_packet_pool = mpp_mem_pool_init(module_name, sizeof(MppPacketImpl), NULL); #define setup_mpp_packet_name(packet) \ ((MppPacketImpl*)packet)->name = module_name; @@ -46,7 +46,7 @@ MPP_RET mpp_packet_new(MppPacket *packet) return MPP_ERR_NULL_PTR; } - MppPacketImpl *p = (MppPacketImpl*)mpp_mem_pool_get(mpp_packet_pool); + MppPacketImpl *p = (MppPacketImpl*)mpp_mem_pool_get_f(mpp_packet_pool); *packet = p; if (NULL == p) { mpp_err_f("malloc failed\n"); @@ -181,7 +181,7 @@ MPP_RET mpp_packet_deinit(MppPacket *packet) if (p->release) p->release(p->release_ctx, p->release_arg); - mpp_mem_pool_put(mpp_packet_pool, *packet); + mpp_mem_pool_put_f(mpp_packet_pool, *packet); *packet = NULL; return MPP_OK; } diff --git a/mpp/base/mpp_sys_cfg.cpp b/mpp/base/mpp_sys_cfg.cpp index 2ab307cd..2e9f680b 100644 --- a/mpp/base/mpp_sys_cfg.cpp +++ b/mpp/base/mpp_sys_cfg.cpp @@ -41,7 +41,7 @@ #define SYS_CFG_CNT 3 RK_U32 mpp_sys_cfg_debug = 0; -static MppMemPool mpp_sys_cfg_pool = mpp_mem_pool_init_f(MODULE_TAG, sizeof(MppSysCfgSet)); +static MppMemPool mpp_sys_cfg_pool = mpp_mem_pool_init(MODULE_TAG, sizeof(MppSysCfgSet), NULL); class MppSysCfgService { @@ -145,7 +145,7 @@ MppSysCfgSet *MppSysCfgService::get_cfg() { MppSysCfgSet *node; - node = (MppSysCfgSet*)mpp_mem_pool_get(mpp_sys_cfg_pool); + node = (MppSysCfgSet*)mpp_mem_pool_get_f(mpp_sys_cfg_pool); node->dec_buf_chk.type = MPP_VIDEO_CodingUnused; return node; @@ -153,7 +153,7 @@ MppSysCfgSet *MppSysCfgService::get_cfg() MPP_RET MppSysCfgService::put_cfg(MppSysCfgSet *node) { - mpp_mem_pool_put(mpp_sys_cfg_pool, node); + mpp_mem_pool_put_f(mpp_sys_cfg_pool, node); return MPP_OK; } diff --git a/mpp/codec/dec/h264/h264d_api.c b/mpp/codec/dec/h264/h264d_api.c index 63d68a9b..7c518cd6 100644 --- a/mpp/codec/dec/h264/h264d_api.c +++ b/mpp/codec/dec/h264/h264d_api.c @@ -159,7 +159,7 @@ static MPP_RET free_vid_ctx(H264dVideoCtx_t *p_Vid) free_storable_picture(p_Vid->p_Dec, p_Vid->dec_pic); if (p_Vid->pic_st) { - mpp_mem_pool_deinit(p_Vid->pic_st); + mpp_mem_pool_deinit_f(p_Vid->pic_st); p_Vid->pic_st = NULL; } @@ -187,7 +187,7 @@ static MPP_RET init_vid_ctx(H264dVideoCtx_t *p_Vid) p_Vid->active_subsps = NULL; p_Vid->active_sps_id[0] = -1; p_Vid->active_sps_id[1] = -1; - p_Vid->pic_st = mpp_mem_pool_init(sizeof(H264_StorePic_t)); + p_Vid->pic_st = mpp_mem_pool_init_f("h264d_pic_st", sizeof(H264_StorePic_t)); __RETURN: return ret = MPP_OK; __FAILED: diff --git a/mpp/codec/dec/h264/h264d_dpb.c b/mpp/codec/dec/h264/h264d_dpb.c index dd9dd7ef..10f1a7fd 100644 --- a/mpp/codec/dec/h264/h264d_dpb.c +++ b/mpp/codec/dec/h264/h264d_dpb.c @@ -1216,8 +1216,8 @@ static MPP_RET dpb_split_field(H264dVideoCtx_t *p_Vid, H264_FrameStore_t *fs) } return ret = MPP_OK; __FAILED: - mpp_mem_pool_put(p_Vid->pic_st, fs->top_field); - mpp_mem_pool_put(p_Vid->pic_st, fs->bottom_field); + mpp_mem_pool_put_f(p_Vid->pic_st, fs->top_field); + mpp_mem_pool_put_f(p_Vid->pic_st, fs->bottom_field); fs->top_field = NULL; fs->bottom_field = NULL; return ret; @@ -1796,7 +1796,7 @@ void free_storable_picture(H264_DecCtx_t *p_Dec, H264_StorePic_t *p) if (p->mem_malloc_type == Mem_BotOnly) { free_dpb_mark(p_Dec, p->mem_mark, BOTTOM_FIELD); } - mpp_mem_pool_put(p_Dec->p_Vid->pic_st, p); + mpp_mem_pool_put_f(p_Dec->p_Vid->pic_st, p); } } @@ -1810,7 +1810,7 @@ void free_storable_picture(H264_DecCtx_t *p_Dec, H264_StorePic_t *p) H264_StorePic_t *alloc_storable_picture(H264dVideoCtx_t *p_Vid, RK_S32 structure) { MPP_RET ret = MPP_ERR_UNKNOW; - H264_StorePic_t *s = mpp_mem_pool_get(p_Vid->pic_st); + H264_StorePic_t *s = mpp_mem_pool_get_f(p_Vid->pic_st); MEM_CHECK(ret, s); s->view_id = -1; diff --git a/mpp/codec/dec/h264/h264d_init.c b/mpp/codec/dec/h264/h264d_init.c index 41f77fa8..6728405a 100644 --- a/mpp/codec/dec/h264/h264d_init.c +++ b/mpp/codec/dec/h264/h264d_init.c @@ -736,7 +736,7 @@ static MPP_RET alloc_decpic(H264_SLICE_t *currSlice) return ret = MPP_OK; __FAILED: - mpp_mem_pool_put(p_Vid->pic_st, dec_pic); + mpp_mem_pool_put_f(p_Vid->pic_st, dec_pic); p_Vid->dec_pic = NULL; return ret; diff --git a/mpp/codec/dec/h265/h265d_parser.c b/mpp/codec/dec/h265/h265d_parser.c index 04f32551..fd0f6b0c 100644 --- a/mpp/codec/dec/h265/h265d_parser.c +++ b/mpp/codec/dec/h265/h265d_parser.c @@ -2080,11 +2080,11 @@ MPP_RET h265d_deinit(void *ctx) for (i = 0; i < MAX_VPS_COUNT; i++) { if (s->vps_list[i]) - mpp_mem_pool_put(s->vps_pool, s->vps_list[i]); + mpp_mem_pool_put_f(s->vps_pool, s->vps_list[i]); } for (i = 0; i < MAX_SPS_COUNT; i++) { if (s->sps_list[i]) - mpp_mem_pool_put(s->sps_pool, s->sps_list[i]); + mpp_mem_pool_put_f(s->sps_pool, s->sps_list[i]); } for (i = 0; i < MAX_PPS_COUNT; i++) mpp_hevc_pps_free(s->pps_list[i]); @@ -2117,9 +2117,9 @@ MPP_RET h265d_deinit(void *ctx) } if (s->vps_pool) - mpp_mem_pool_deinit(s->vps_pool); + mpp_mem_pool_deinit_f(s->vps_pool); if (s->sps_pool) - mpp_mem_pool_deinit(s->sps_pool); + mpp_mem_pool_deinit_f(s->sps_pool); MPP_FREE((s->hdr_dynamic_meta)); @@ -2251,8 +2251,8 @@ MPP_RET h265d_init(void *ctx, ParserCfg *parser_cfg) s->pre_pps_id = -1; - s->vps_pool = mpp_mem_pool_init(sizeof(HEVCVPS)); - s->sps_pool = mpp_mem_pool_init(sizeof(HEVCSPS)); + s->vps_pool = mpp_mem_pool_init_f("h264d_vps", sizeof(HEVCVPS)); + s->sps_pool = mpp_mem_pool_init_f("h265d_sps", sizeof(HEVCSPS)); mpp_slots_set_prop(s->slots, SLOTS_WIDTH_ALIGN, rkv_ctu_64_align); diff --git a/mpp/codec/dec/h265/h265d_ps.c b/mpp/codec/dec/h265/h265d_ps.c index 0c34eb1d..834730bc 100644 --- a/mpp/codec/dec/h265/h265d_ps.c +++ b/mpp/codec/dec/h265/h265d_ps.c @@ -1042,7 +1042,7 @@ int mpp_hevc_decode_nal_vps(HEVCContext *s) BitReadCtx_t *gb = &s->HEVClc->gb; RK_U32 vps_id = 0; HEVCVPS *vps = NULL; - RK_U8 *vps_buf = mpp_mem_pool_get(s->vps_pool); + RK_U8 *vps_buf = mpp_mem_pool_get_f(s->vps_pool); RK_S32 value = 0; if (!vps_buf) @@ -1158,10 +1158,10 @@ int mpp_hevc_decode_nal_vps(HEVCContext *s) if (s->vps_list[vps_id] && !memcmp(s->vps_list[vps_id], vps_buf, sizeof(HEVCVPS))) { - mpp_mem_pool_put(s->vps_pool, vps_buf); + mpp_mem_pool_put_f(s->vps_pool, vps_buf); } else { if (s->vps_list[vps_id] != NULL) { - mpp_mem_pool_put(s->vps_pool, s->vps_list[vps_id]); + mpp_mem_pool_put_f(s->vps_pool, s->vps_list[vps_id]); } s->vps_list[vps_id] = vps_buf; s->ps_need_upate = 1; @@ -1170,7 +1170,7 @@ int mpp_hevc_decode_nal_vps(HEVCContext *s) return 0; __BITREAD_ERR: err: - mpp_mem_pool_put(s->vps_pool, vps_buf); + mpp_mem_pool_put_f(s->vps_pool, vps_buf); return MPP_ERR_STREAM; } @@ -1421,7 +1421,7 @@ RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s) RK_S32 value = 0; HEVCSPS *sps; - RK_U8 *sps_buf = mpp_mem_pool_get(s->sps_pool); + RK_U8 *sps_buf = mpp_mem_pool_get_f(s->sps_pool); if (!sps_buf) return MPP_ERR_NOMEM; @@ -1886,7 +1886,7 @@ RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s) */ if (s->sps_list[sps_id] && !memcmp(s->sps_list[sps_id], sps_buf, sizeof(HEVCSPS))) { - mpp_mem_pool_put(s->sps_pool, sps_buf); + mpp_mem_pool_put_f(s->sps_pool, sps_buf); } else { for (i = 0; (RK_U32)i < MPP_ARRAY_ELEMS(s->pps_list); i++) { if (s->pps_list[i] && ((HEVCPPS*)s->pps_list[i])->sps_id == sps_id) { @@ -1895,7 +1895,7 @@ RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s) } } if (s->sps_list[sps_id] != NULL) - mpp_mem_pool_put(s->sps_pool, s->sps_list[sps_id]); + mpp_mem_pool_put_f(s->sps_pool, s->sps_list[sps_id]); s->sps_list[sps_id] = sps_buf; s->sps_need_upate = 1; } @@ -1907,7 +1907,7 @@ RK_S32 mpp_hevc_decode_nal_sps(HEVCContext *s) __BITREAD_ERR: ret = MPP_ERR_STREAM; err: - mpp_mem_pool_put(s->sps_pool, sps_buf); + mpp_mem_pool_put_f(s->sps_pool, sps_buf); return ret; } diff --git a/mpp/codec/mpp_dec.cpp b/mpp/codec/mpp_dec.cpp index 7dc9aee0..df7a41b9 100644 --- a/mpp/codec/mpp_dec.cpp +++ b/mpp/codec/mpp_dec.cpp @@ -308,7 +308,7 @@ void mpp_dec_put_frame(Mpp *mpp, RK_S32 index, HalDecTaskFlag flags) if (pkt_ts) { mpp_frame_set_dts(frame, pkt_ts->dts); mpp_frame_set_pts(frame, pkt_ts->pts); - mpp_mem_pool_put(dec->ts_pool, pkt_ts); + mpp_mem_pool_put_f(dec->ts_pool, pkt_ts); } } } @@ -677,7 +677,7 @@ MPP_RET mpp_dec_init(MppDec *dec, MppDecInitCfg *cfg) // init timestamp for record and sort pts mpp_spinlock_init(&p->ts_lock); INIT_LIST_HEAD(&p->ts_link); - p->ts_pool = mpp_mem_pool_init(sizeof(MppPktTs)); + p->ts_pool = mpp_mem_pool_init_f("ts_pool", sizeof(MppPktTs)); if (!p->ts_pool) { mpp_err_f("malloc ts pool failed!\n"); break; @@ -770,7 +770,7 @@ MPP_RET mpp_dec_deinit(MppDec ctx) sem_destroy(&dec->cmd_done); if (dec->ts_pool) { - mpp_mem_pool_deinit(dec->ts_pool); + mpp_mem_pool_deinit_f(dec->ts_pool); dec->ts_pool = NULL; } diff --git a/mpp/codec/mpp_dec_normal.cpp b/mpp/codec/mpp_dec_normal.cpp index af772416..01652b73 100644 --- a/mpp/codec/mpp_dec_normal.cpp +++ b/mpp/codec/mpp_dec_normal.cpp @@ -209,7 +209,7 @@ static RK_U32 reset_parser_thread(Mpp *mpp, DecTask *task) mpp_spinlock_lock(&dec->ts_lock); list_for_each_entry_safe(ts, pos, &dec->ts_link, MppPktTs, link) { list_del_init(&ts->link); - mpp_mem_pool_put(dec->ts_pool, ts); + mpp_mem_pool_put_f(dec->ts_pool, ts); } mpp_spinlock_unlock(&dec->ts_lock); } @@ -648,7 +648,7 @@ static MPP_RET try_proc_dec_task(Mpp *mpp, DecTask *task) if (dec->cfg->base.sort_pts) { MppFrame frame = NULL; - MppPktTs *pkt_ts = (MppPktTs *)mpp_mem_pool_get(dec->ts_pool); + MppPktTs *pkt_ts = (MppPktTs *)mpp_mem_pool_get_f(dec->ts_pool); mpp_assert(pkt_ts); mpp_buf_slot_get_prop(frame_slots, output, SLOT_FRAME_PTR, &frame); diff --git a/osal/driver/mpp_server.c b/osal/driver/mpp_server.c index 3c7c54d8..ec99ae35 100644 --- a/osal/driver/mpp_server.c +++ b/osal/driver/mpp_server.c @@ -201,7 +201,7 @@ static void batch_reset(MppDevBatTask *batch) MppDevBatTask *batch_add(MppDevBatServ *server) { - MppDevBatTask *batch = (MppDevBatTask *)mpp_mem_pool_get(server->batch_pool); + MppDevBatTask *batch = (MppDevBatTask *)mpp_mem_pool_get_f(server->batch_pool); mpp_assert(batch); if (!batch) @@ -232,7 +232,7 @@ void batch_del(MppDevBatServ *server, MppDevBatTask *batch) list_del_init(&batch->link_server); - mpp_mem_pool_put(server->batch_pool, batch); + mpp_mem_pool_put_f(server->batch_pool, batch); server->batch_free--; mpp_serv_dbg_flow("batch del free count %d:%d\n", server->batch_run, server->batch_free); } @@ -697,7 +697,7 @@ static rk_s32 server_attach(MppDevServer *srv, MppDevMppService *ctx) return rk_ok; } - session = (MppDevSession *)mpp_mem_pool_get(srv->session_pool); + session = (MppDevSession *)mpp_mem_pool_get_f(srv->session_pool); INIT_LIST_HEAD(&session->list_server); INIT_LIST_HEAD(&session->list_wait); @@ -770,7 +770,7 @@ static rk_s32 server_detach(MppDevServer *srv, MppDevMppService *ctx) mpp_mutex_cond_destroy(&session->cond_lock); - mpp_mem_pool_put(srv->session_pool, session); + mpp_mem_pool_put_f(srv->session_pool, session); server->batch_max_count++; server->session_count++; @@ -783,12 +783,12 @@ static void server_clear(MppDevServer *srv) { if (srv) { if (srv->session_pool) { - mpp_mem_pool_deinit(srv->session_pool); + mpp_mem_pool_deinit_f(srv->session_pool); srv->session_pool = NULL; } if (srv->batch_pool) { - mpp_mem_pool_deinit(srv->batch_pool); + mpp_mem_pool_deinit_f(srv->batch_pool); srv->batch_pool = NULL; } @@ -850,13 +850,13 @@ static void mpp_server_init() break; } - srv->session_pool = mpp_mem_pool_init(sizeof(MppDevSession)); + srv->session_pool = mpp_mem_pool_init_f("server_session", sizeof(MppDevSession)); if (!srv->session_pool) { srv->server_error = "create session pool failed"; break; } - srv->batch_pool = mpp_mem_pool_init(batch_task_size); + srv->batch_pool = mpp_mem_pool_init_f("server_batch", batch_task_size); if (!srv->batch_pool) { srv->server_error = "create batch tack pool failed"; break; diff --git a/osal/driver/mpp_service.c b/osal/driver/mpp_service.c index 726efcf2..072e11b0 100644 --- a/osal/driver/mpp_service.c +++ b/osal/driver/mpp_service.c @@ -399,7 +399,7 @@ MPP_RET mpp_service_deinit(void *ctx) pos->lock_buf = NULL; pos->lock_dev = NULL; mpp_service_ioc_detach_fd(pos); - mpp_mem_pool_put_f(__FUNCTION__, pos->pool, pos); + mpp_mem_pool_put_f(pos->pool, pos); pthread_mutex_unlock(lock_buf); } diff --git a/osal/inc/mpp_mem_pool.h b/osal/inc/mpp_mem_pool.h index 6fd2385b..45b31540 100644 --- a/osal/inc/mpp_mem_pool.h +++ b/osal/inc/mpp_mem_pool.h @@ -14,17 +14,17 @@ typedef void* MppMemPool; extern "C" { #endif -#define mpp_mem_pool_init(size) mpp_mem_pool_init_f(__FUNCTION__, size) -#define mpp_mem_pool_deinit(pool) mpp_mem_pool_deinit_f(__FUNCTION__, pool); +#define mpp_mem_pool_init_f(name, size) mpp_mem_pool_init(name, size, __FUNCTION__) +#define mpp_mem_pool_deinit_f(pool) mpp_mem_pool_deinit(pool, __FUNCTION__); -#define mpp_mem_pool_get(pool) mpp_mem_pool_get_f(__FUNCTION__, pool) -#define mpp_mem_pool_put(pool, p) mpp_mem_pool_put_f(__FUNCTION__, pool, p) +#define mpp_mem_pool_get_f(pool) mpp_mem_pool_get(pool, __FUNCTION__) +#define mpp_mem_pool_put_f(pool, p) mpp_mem_pool_put(pool, p, __FUNCTION__) -MppMemPool mpp_mem_pool_init_f(const char *caller, size_t size); -void mpp_mem_pool_deinit_f(const char *caller, MppMemPool pool); +MppMemPool mpp_mem_pool_init(const char *name, size_t size, const char *caller); +void mpp_mem_pool_deinit(MppMemPool pool, const char *caller); -void *mpp_mem_pool_get_f(const char *caller, MppMemPool pool); -void mpp_mem_pool_put_f(const char *caller, MppMemPool pool, void *p); +void *mpp_mem_pool_get(MppMemPool pool, const char *caller); +void mpp_mem_pool_put(MppMemPool pool, void *p, const char *caller); #ifdef __cplusplus } diff --git a/osal/mpp_mem_pool.c b/osal/mpp_mem_pool.c index a58b5b29..9c6db075 100644 --- a/osal/mpp_mem_pool.c +++ b/osal/mpp_mem_pool.c @@ -15,12 +15,14 @@ #include "mpp_mem_pool.h" -#define MPP_MEM_POOL_DBG_FLOW (0x00000001) +#define MEM_POOL_DBG_FLOW (0x00000001) +#define MEM_POOL_DBG_EXIT (0x00000002) #define mem_pool_dbg(flag, fmt, ...) _mpp_dbg(mpp_mem_pool_debug, flag, fmt, ## __VA_ARGS__) #define mem_pool_dbg_f(flag, fmt, ...) _mpp_dbg_f(mpp_mem_pool_debug, flag, fmt, ## __VA_ARGS__) -#define mem_pool_dbg_flow(fmt, ...) mem_pool_dbg(MPP_MEM_POOL_DBG_FLOW, fmt, ## __VA_ARGS__) +#define mem_pool_dbg_flow(fmt, ...) mem_pool_dbg(MEM_POOL_DBG_FLOW, fmt, ## __VA_ARGS__) +#define mem_pool_dbg_exit(fmt, ...) mem_pool_dbg(MEM_POOL_DBG_EXIT, fmt, ## __VA_ARGS__) #define get_srv_mem_pool(caller) \ ({ \ @@ -37,7 +39,7 @@ __tmp; \ }) -rk_u32 mpp_mem_pool_debug = 0; +static rk_u32 mpp_mem_pool_debug = 0; typedef struct MppMemPoolNode_t { void *check; @@ -48,7 +50,7 @@ typedef struct MppMemPoolNode_t { typedef struct MppMemPoolImpl_t { void *check; - const char *caller; + const char *name; size_t size; pthread_mutex_t lock; struct list_head service_link; @@ -120,8 +122,8 @@ static void put_pool(MppMemPoolSrv *srv, MppMemPoolImpl *impl) } if (!list_empty(&impl->used)) { - mpp_err_f("pool %s found %d used buffer size %d\n", - impl->caller, impl->used_count, impl->size); + mpp_err_f("pool %-16s found %d used buffer size %4d\n", + impl->name, impl->used_count, impl->size); list_for_each_entry_safe(node, m, &impl->used, MppMemPoolNode, list) { MPP_FREE(node); @@ -130,8 +132,8 @@ static void put_pool(MppMemPoolSrv *srv, MppMemPoolImpl *impl) } if (impl->used_count || impl->unused_count) - mpp_err_f("pool %s size %d found leaked buffer used:unused [%d:%d]\n", - impl->caller, impl->size, impl->used_count, impl->unused_count); + mpp_err_f("pool %-16s size %4d found leaked buffer used:unused [%d:%d]\n", + impl->name, impl->size, impl->used_count, impl->unused_count); pthread_mutex_unlock(&impl->lock); @@ -156,6 +158,7 @@ static void mem_pool_srv_deinit() MppMemPoolImpl *pos, *n; list_for_each_entry_safe(pos, n, &srv->list, MppMemPoolImpl, service_link) { + mem_pool_dbg_exit("pool %-16s size %4d leaked\n", pos->name, pos->size); put_pool(srv, pos); } } @@ -166,7 +169,7 @@ static void mem_pool_srv_deinit() srv_mem_pool = NULL; } -MppMemPool mpp_mem_pool_init_f(const char *caller, size_t size) +MppMemPool mpp_mem_pool_init(const char *name, size_t size, const char *caller) { MppMemPoolSrv *srv = get_srv_mem_pool(caller); MppMemPoolImpl *pool; @@ -188,7 +191,7 @@ MppMemPool mpp_mem_pool_init_f(const char *caller, size_t size) } pool->check = pool; - pool->caller = caller; + pool->name = name; pool->size = size; pool->used_count = 0; pool->unused_count = 0; @@ -202,22 +205,23 @@ MppMemPool mpp_mem_pool_init_f(const char *caller, size_t size) list_add_tail(&pool->service_link, &srv->list); pthread_mutex_unlock(&srv->lock); - mem_pool_dbg_flow("pool %d init from %s\n", size, caller); + mem_pool_dbg_flow("pool %-16s size %4d init at %s\n", pool->name, size, caller); return pool; } -void mpp_mem_pool_deinit_f(const char *caller, MppMemPool pool) +void mpp_mem_pool_deinit(MppMemPool pool, const char *caller) { MppMemPoolSrv *srv = get_srv_mem_pool(caller); MppMemPoolImpl *impl = (MppMemPoolImpl *)pool; - mem_pool_dbg_flow("pool %d deinit from %s\n", impl->size, caller); + mem_pool_dbg_flow("pool %-16s size %4d deinit at %s\n", + impl->name, impl->size, caller); put_pool(srv, impl); } -void *mpp_mem_pool_get_f(const char *caller, MppMemPool pool) +void *mpp_mem_pool_get(MppMemPool pool, const char *caller) { MppMemPoolImpl *impl = (MppMemPoolImpl *)pool; MppMemPoolNode *node = NULL; @@ -225,8 +229,8 @@ void *mpp_mem_pool_get_f(const char *caller, MppMemPool pool) pthread_mutex_lock(&impl->lock); - mem_pool_dbg_flow("pool %d get used:unused [%d:%d] from %s\n", impl->size, - impl->used_count, impl->unused_count, caller); + mem_pool_dbg_flow("pool %-16s size %4d get used:unused [%d:%d] at %s\n", + impl->name, impl->size, impl->used_count, impl->unused_count, caller); if (!list_empty(&impl->unused)) { node = list_first_entry(&impl->unused, MppMemPoolNode, list); @@ -243,7 +247,7 @@ void *mpp_mem_pool_get_f(const char *caller, MppMemPool pool) node = mpp_malloc_size(MppMemPoolNode, sizeof(MppMemPoolNode) + impl->size); if (!node) { - mpp_err_f("failed to create node from size %d pool\n", impl->size); + mpp_err_f("failed to create node from size %4d pool\n", impl->size); goto DONE; } @@ -262,7 +266,7 @@ DONE: return ptr; } -void mpp_mem_pool_put_f(const char *caller, MppMemPool pool, void *p) +void mpp_mem_pool_put(MppMemPool pool, void *p, const char *caller) { MppMemPoolImpl *impl = (MppMemPoolImpl *)pool; MppMemPoolNode *node = (MppMemPoolNode *)((rk_u8 *)p - sizeof(MppMemPoolNode)); @@ -280,8 +284,8 @@ void mpp_mem_pool_put_f(const char *caller, MppMemPool pool, void *p) pthread_mutex_lock(&impl->lock); - mem_pool_dbg_flow("pool %d put used:unused [%d:%d] from %s\n", impl->size, - impl->used_count, impl->unused_count, caller); + mem_pool_dbg_flow("pool %-16s size %4d put used:unused [%d:%d] at %s\n", + impl->name, impl->size, impl->used_count, impl->unused_count, caller); list_del_init(&node->list); list_add(&node->list, &impl->unused); diff --git a/osal/test/mpp_mem_pool_test.c b/osal/test/mpp_mem_pool_test.c index 8dbf584d..6cc64b60 100644 --- a/osal/test/mpp_mem_pool_test.c +++ b/osal/test/mpp_mem_pool_test.c @@ -22,38 +22,38 @@ int main() mpp_log("mpp_mem_pool_test start\n"); - pool = mpp_mem_pool_init(size); + pool = mpp_mem_pool_init_f(MODULE_TAG, size); if (NULL == pool) { mpp_err("mpp_mem_pool_test mpp_mem_pool_init failed\n"); goto mpp_mem_pool_test_failed; } for (i = 0; i < MPP_MEM_POOL_TEST_COUNT; i++) { - p[i] = mpp_mem_pool_get(pool); + p[i] = mpp_mem_pool_get_f(pool); if (!p[i]) { - mpp_err("mpp_mem_pool_test mpp_mem_pool_get failed\n"); + mpp_err("mpp_mem_pool_test mpp_mem_pool_get_f failed\n"); goto mpp_mem_pool_test_failed; } } for (i = 0; i < MPP_MEM_POOL_TEST_COUNT / 2; i++) { if (p[i]) { - mpp_mem_pool_put(pool, p[i]); + mpp_mem_pool_put_f(pool, p[i]); p[i] = NULL; } } for (i = 0; i < MPP_MEM_POOL_TEST_COUNT / 4; i++) { - p[i] = mpp_mem_pool_get(pool); + p[i] = mpp_mem_pool_get_f(pool); if (!p[i]) { - mpp_err("mpp_mem_pool_test mpp_mem_pool_get failed\n"); + mpp_err("mpp_mem_pool_test mpp_mem_pool_get_f failed\n"); goto mpp_mem_pool_test_failed; } } for (i = 0; i < MPP_MEM_POOL_TEST_COUNT; i++) { if (p[i]) { - mpp_mem_pool_put(pool, p[i]); + mpp_mem_pool_put_f(pool, p[i]); p[i] = NULL; } }