From: hcj <1224667075@qq.com> Date: Wed, 2 Jul 2025 01:52:46 +0000 (+0800) Subject: 修复创建 websocket 内存泄漏问题 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=2ed7d73e55f1385b1dafb0038883b6aba3060290;p=mirrors%2FFD230.git 修复创建 websocket 内存泄漏问题 --- diff --git a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp index 2a2857f90..1b6c2b405 100644 --- a/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp +++ b/code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp @@ -530,7 +530,7 @@ int send_websocket_message(WebSocketClient *client, const unsigned char *message goto send_websocket_message_ERROR; } ret = 0; -send_websocket_message_ERROR: + send_websocket_message_ERROR: bk_sleep(message_len/1000+1); free(frame); // bk_sleep(message_len/1000+1); @@ -746,8 +746,6 @@ WebSocketClient *init_websocket_client(const char *url, const char *headers,uint err_t ret=0; - ip_sem.dns_done_sem = osSemaphoreNew(1, 0, NULL); - parsed_url = parse_url(url);//解析url if (parsed_url.error) { @@ -772,13 +770,21 @@ WebSocketClient *init_websocket_client(const char *url, const char *headers,uint client->sockfd = lwip_socket(AF_INET, SOCK_STREAM, 0); if (client->sockfd < 0) { + printf("socket creation failed %d errno: %d\r\n",client->sockfd,errno); goto client_ERROR; } -lwip_setsockopt(client->sockfd, SOL_SOCKET, SO_KEEPALIVE, (const void*)&opt, sizeof(opt)); + lwip_setsockopt(client->sockfd, SOL_SOCKET, SO_KEEPALIVE, (const void*)&opt, sizeof(opt)); + lwip_setsockopt(client->sockfd, SOL_SOCKET, SO_REUSEADDR,(const void*)&opt, sizeof(opt)); // printf("init_websocket_client 3\n"); if(use_dns) { + ip_sem.dns_done_sem= osSemaphoreNew(1, 0, NULL); + if(ip_sem.dns_done_sem==0) + { + goto client_ERROR; + } + ret =dns_gethostbyname(parsed_url.host,&ip,dns_found,&ip_sem); // if(ERR_OK==ret) { @@ -872,8 +878,9 @@ void lwip_close_websocket_client(WebSocketClient *client) { { printf("lwip_close_websocket_client "); lwip_shutdown(client->sockfd,SHUT_RDWR); + bk_sleep(10); int err= lwip_close(client->sockfd); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"lwip_close %d\n",err); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"lwip_close %d %d\n",client->sockfd,err); free(client); } @@ -1442,6 +1449,9 @@ bool aer_result_analysis(char *buf) { stop_AudioCaptureProcess_AI(); asr_is_start=0; + + // bool state = false; + // SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool)); // uapi_stop_asr(); return false; } @@ -1478,6 +1488,10 @@ int g_test_server_index = 1; //0 正式版本, 1 测试版本, 2 Snicker 服 static int asr_client_ping=0; +int asr_client_sockfd_last_id=-1; + +void asr_server_deinit(void); + void bk_websocket_asr(void *data) { @@ -1487,7 +1501,7 @@ void bk_websocket_asr(void *data) { bool state = true; is_bk_websocket_asr=1; -// while (disconnect_server==0) + // while (1) { char url_buf[124]={0}; if (g_test_server_index==0) @@ -1562,7 +1576,13 @@ void bk_websocket_asr(void *data) { // uapi_start_asr(); // SendMsgToUIService(UI_4G_AI_INIT_STAUS, 0,&state, sizeof(bool)); + + int sndbuf_len = 1024*5; + lwip_setsockopt(asr_client->sockfd, SOL_SOCKET, SO_SNDBUF, &sndbuf_len, sizeof(sndbuf_len)); + uapi_start_asr(); + + // asr_server_deinit(); while (disconnect_server==0) { @@ -1586,7 +1606,7 @@ void bk_websocket_asr(void *data) { { if(false== aer_result_analysis(asr_recv_buf)) { -printf("WS_lwip_close false== aer_result_analysis(asr_recv_buf)\r\n"); + printf("WS_lwip_close false== aer_result_analysis(asr_recv_buf)\r\n"); break; } } @@ -1598,9 +1618,11 @@ printf("WS_lwip_close false== aer_result_analysis(asr_recv_buf)\r\n"); set_ai_asr_service_init_flag(0); free(asr_recv_buf); + lwip_close_websocket_client(asr_client); asr_client=NULL; -asr_client_ping=0; + + asr_client_ping=0; bk_sleep(1000); // return; } @@ -2014,7 +2036,7 @@ static void time_sync_func(void) { if(asr_client) { - if(asr_client_ping) + if(asr_client_ping) { asr_server_deinit(); lwip_close_websocket_client(asr_client);