summaryrefslogtreecommitdiff
path: root/src/project
diff options
context:
space:
mode:
authorlijia <[email protected]>2021-10-09 16:11:38 +0800
committerlijia <[email protected]>2021-10-09 16:11:38 +0800
commit2dda42342fad6818af3618a264a5775ffb2af17d (patch)
treeb51657d174804d3894b78d2ae9e4988256ded877 /src/project
parent90ce47ab5c82067de4b7559bb69cb9aa7d5285e6 (diff)
TSG-7425, TSG-7978,
修复sapp退出时未释放的内存. 增加breakpad_destroy()接口;
Diffstat (limited to 'src/project')
-rw-r--r--src/project/stream_bridge.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/project/stream_bridge.c b/src/project/stream_bridge.c
index d824539..52ff294 100644
--- a/src/project/stream_bridge.c
+++ b/src/project/stream_bridge.c
@@ -31,6 +31,13 @@ static stream_bridge_manage_t g_stream_bridge_manage[STREAM_BRIDGE_MAX_NUM];
static MESA_htable_handle g_stream_bridge_name2id_htable;
+static void _stream_bridge_name2id_htable_free_cb(void *data)
+{
+ if(data){
+ sapp_mem_free(SAPP_MEM_FIX_GLOBAL_STREAM, -1, data);
+ }
+}
+
static MESA_htable_handle stream_bridge_name2id_htable_create(void)
{
MESA_htable_handle htable;
@@ -58,7 +65,9 @@ static MESA_htable_handle stream_bridge_name2id_htable_create(void)
MESA_htable_set_opt(htable, MHO_SCREEN_PRINT_CTRL, &opt_int, sizeof(int));
opt_int = HASH_ELIMINATE_ALGO_FIFO;
- MESA_htable_set_opt(htable, MHO_ELIMIMINATE_TYPE, &opt_int, sizeof(int));
+ MESA_htable_set_opt(htable, MHO_ELIMIMINATE_TYPE, &opt_int, sizeof(int));
+
+ MESA_htable_set_opt(htable, MHO_CBFUN_DATA_FREE, _stream_bridge_name2id_htable_free_cb, sizeof(void *));
ret = MESA_htable_mature(htable);
if(ret < 0){
@@ -85,7 +94,7 @@ static int stream_bridege_create_new_bridge(const char *bridge_name)
{
int *bridge_id, ret;
- bridge_id = (int *)malloc(sizeof(int));
+ bridge_id = (int *)sapp_mem_calloc(SAPP_MEM_FIX_GLOBAL_STREAM, -1, sizeof(int));
*bridge_id = g_stream_bridge_actual_num;
@@ -186,7 +195,7 @@ int stream_bridge_register_data_sync_cb(int bridge_id, stream_bridge_sync_cb_t *
return -1;
}
- new_list_node = (struct MESA_list *)malloc(sizeof(struct MESA_list));
+ new_list_node = (struct MESA_list *)sapp_mem_calloc(SAPP_MEM_FIX_GLOBAL_STREAM, -1, sizeof(struct MESA_list));
new_list_node->quiddity = cb_fun;
MESA_list_add(&g_stream_bridge_manage[bridge_id].sync_callback_fun_list, new_list_node);
@@ -289,9 +298,22 @@ int stream_bridge_init(void)
void stream_bridge_destroy(void)
{
- g_stream_bridge_actual_num = 0;
- memset(g_stream_bridge_manage, 0, sizeof(g_stream_bridge_manage));
+ int bridge_id;
+ MESA_list_t *list_node, *next_node;
MESA_htable_destroy(g_stream_bridge_name2id_htable, NULL);
+
+ for(bridge_id = 0; bridge_id < g_stream_bridge_actual_num; bridge_id++){
+ list_node = g_stream_bridge_manage[bridge_id].sync_callback_fun_list.nextele;
+ while(0 == MESA_list_is_empty(&g_stream_bridge_manage[bridge_id].sync_callback_fun_list)){
+ next_node = list_node->nextele;
+ MESA_list_del(&g_stream_bridge_manage[bridge_id].sync_callback_fun_list, list_node);
+ sapp_mem_free(SAPP_MEM_FIX_GLOBAL_STREAM, -1, (void *)list_node);
+ list_node = next_node;
+ }
+ }
+
+ g_stream_bridge_actual_num = 0;
+ memset(g_stream_bridge_manage, 0, sizeof(g_stream_bridge_manage));
g_stream_bridge_name2id_htable = NULL;
}