mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-09-26 21:15:53 +08:00
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 <herman.chen@rock-chips.com> Change-Id: I39a8a966db895340a9e01ddff3a7894f1ca4b825
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
@@ -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]) {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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:
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user