From cde1647b4bb162c0f492a17b7dafc61d9192e8b5 Mon Sep 17 00:00:00 2001 From: szlr Date: Mon, 24 Apr 2023 11:38:04 +0800 Subject: [PATCH 1/2] [HUST CSE] Fixed memory leak and type conversion issues --- net/lwip/port/src/sys_arch.c | 41 +++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/net/lwip/port/src/sys_arch.c b/net/lwip/port/src/sys_arch.c index 31b65df7..42f9a2c3 100644 --- a/net/lwip/port/src/sys_arch.c +++ b/net/lwip/port/src/sys_arch.c @@ -122,36 +122,36 @@ void sys_sem_set_invalid(sys_sem_t *sem) } /* - 如果timeout参数不为零,则返回值为 - 等待信号量所花费的毫秒数。如果 - 信号量未在指定时间内发出信号,返回值为 - SYS_ARCH_TIMEOUT。如果线程不必等待信号量 - 该函数返回零。 */ + 锟斤拷锟絫imeout锟斤拷锟斤拷锟斤拷为锟姐,锟津返伙拷值为 + 锟饺达拷锟脚猴拷锟斤拷锟斤拷锟斤拷锟窖的猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟 + 锟脚猴拷锟斤拷未锟斤拷指锟斤拷时锟斤拷锟节凤拷锟斤拷锟脚号o拷锟斤拷锟斤拷值为 + SYS_ARCH_TIMEOUT锟斤拷锟斤拷锟斤拷叱滩锟斤拷氐却锟斤拷藕锟斤拷锟 + 锟矫猴拷锟斤拷锟斤拷锟斤拷锟姐。 */ u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) { k_tick_t wait_tick = 0; k_tick_t start_tick = 0; - //看看信号量是否有效 + //锟斤拷锟斤拷锟脚猴拷锟斤拷锟角凤拷锟斤拷效 if (sem == SYS_SEM_NULL) { return SYS_ARCH_TIMEOUT; } - //首先获取开始等待信号量的时钟节拍 + //锟斤拷锟饺伙拷取锟斤拷始锟饺达拷锟脚猴拷锟斤拷锟斤拷时锟接斤拷锟斤拷 start_tick = sys_now(); - //timeout != 0,需要将ms换成系统的时钟节拍 + //timeout != 0锟斤拷锟斤拷要锟斤拷ms锟斤拷锟斤拷系统锟斤拷时锟接斤拷锟斤拷 if (timeout != 0) { - //将ms转换成时钟节拍 + //锟斤拷ms转锟斤拷锟斤拷时锟接斤拷锟斤拷 wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND); if (wait_tick == 0) { wait_tick = 1; } } else { - wait_tick = TOS_TIME_FOREVER; //一直阻塞 + wait_tick = TOS_TIME_FOREVER; //一直锟斤拷锟斤拷 } - //等待成功,计算等待的时间,否则就表示等待超时 + //锟饺达拷锟缴癸拷锟斤拷锟斤拷锟斤拷却锟斤拷锟绞憋拷洌拷锟斤拷锟酵憋拷示锟饺达拷锟斤拷时 if (tos_sem_pend(sem, wait_tick) == K_ERR_NONE) { return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND)); } @@ -224,17 +224,20 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn function, void *arg return NULL; } - task_stack = tos_mmheap_alloc(stacksize); + task_stack = (k_stack_t *)tos_mmheap_alloc(stacksize); if (!task_stack) { printf("[sys_arch]:memalloc task stack fail!\n"); + tos_mmheap_free(task); return NULL; } - /* 创建MidPriority_Task任务 */ + /* 锟斤拷锟斤拷MidPriority_Task锟斤拷锟斤拷 */ rc = tos_task_create(task, (char*)name, function, arg, prio, task_stack, stacksize, 20); if (rc != K_ERR_NONE) { printf("[sys_arch]:create task fail! code: %d \r\n", rc); + tos_mmheap_free(task); + tos_mmheap_free(task_stack); return NULL; } @@ -310,25 +313,25 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *q, void **msg, u32_t timeout) k_tick_t wait_tick = 0; k_tick_t start_tick = 0; - if (!msg) { // 看看存储消息的地方是否有效 + if (!msg) { // 锟斤拷锟斤拷锟芥储锟斤拷息锟侥地凤拷锟角凤拷锟斤拷效 msg = &dummyptr; } - // 首先获取开始等待信号量的时钟节拍 + // 锟斤拷锟饺伙拷取锟斤拷始锟饺达拷锟脚猴拷锟斤拷锟斤拷时锟接斤拷锟斤拷 start_tick = sys_now(); - // timeout != 0,需要将ms换成系统的时钟节拍 + // timeout != 0锟斤拷锟斤拷要锟斤拷ms锟斤拷锟斤拷系统锟斤拷时锟接斤拷锟斤拷 if (timeout != 0) { - //将ms转换成时钟节拍 + //锟斤拷ms转锟斤拷锟斤拷时锟接斤拷锟斤拷 wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND); if (wait_tick == 0) { wait_tick = 1; } - } else { // 一直阻塞 + } else { // 一直锟斤拷锟斤拷 wait_tick = TOS_TIME_FOREVER; } - // 等待成功,计算等待的时间,否则就表示等待超时 + // 锟饺达拷锟缴癸拷锟斤拷锟斤拷锟斤拷却锟斤拷锟绞憋拷洌拷锟斤拷锟酵憋拷示锟饺达拷锟斤拷时 if (tos_msg_q_pend(q,&(*msg), wait_tick) == K_ERR_NONE) { return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND)); } From 6289573de1c1fe01479bd428f6a93db1d5215f0e Mon Sep 17 00:00:00 2001 From: szlr Date: Mon, 24 Apr 2023 12:46:44 +0800 Subject: [PATCH 2/2] [HUST CSE] Fixed memory leak and type conversion issues --- net/lwip/port/src/sys_arch.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/net/lwip/port/src/sys_arch.c b/net/lwip/port/src/sys_arch.c index 42f9a2c3..31ce4416 100644 --- a/net/lwip/port/src/sys_arch.c +++ b/net/lwip/port/src/sys_arch.c @@ -122,36 +122,36 @@ void sys_sem_set_invalid(sys_sem_t *sem) } /* - 锟斤拷锟絫imeout锟斤拷锟斤拷锟斤拷为锟姐,锟津返伙拷值为 - 锟饺达拷锟脚猴拷锟斤拷锟斤拷锟斤拷锟窖的猴拷锟斤拷锟斤拷锟斤拷锟斤拷锟 - 锟脚猴拷锟斤拷未锟斤拷指锟斤拷时锟斤拷锟节凤拷锟斤拷锟脚号o拷锟斤拷锟斤拷值为 - SYS_ARCH_TIMEOUT锟斤拷锟斤拷锟斤拷叱滩锟斤拷氐却锟斤拷藕锟斤拷锟 - 锟矫猴拷锟斤拷锟斤拷锟斤拷锟姐。 */ + 濡傛灉timeout鍙傛暟涓嶄负闆讹紝鍒欒繑鍥炲间负 + 绛夊緟淇″彿閲忔墍鑺辫垂鐨勬绉掓暟銆傚鏋 + 淇″彿閲忔湭鍦ㄦ寚瀹氭椂闂村唴鍙戝嚭淇″彿锛岃繑鍥炲间负 + SYS_ARCH_TIMEOUT銆傚鏋滅嚎绋嬩笉蹇呯瓑寰呬俊鍙烽噺 + 璇ュ嚱鏁拌繑鍥為浂銆 */ u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) { k_tick_t wait_tick = 0; k_tick_t start_tick = 0; - //锟斤拷锟斤拷锟脚猴拷锟斤拷锟角凤拷锟斤拷效 + //鐪嬬湅淇″彿閲忔槸鍚︽湁鏁 if (sem == SYS_SEM_NULL) { return SYS_ARCH_TIMEOUT; } - //锟斤拷锟饺伙拷取锟斤拷始锟饺达拷锟脚猴拷锟斤拷锟斤拷时锟接斤拷锟斤拷 + //棣栧厛鑾峰彇寮濮嬬瓑寰呬俊鍙烽噺鐨勬椂閽熻妭鎷 start_tick = sys_now(); - //timeout != 0锟斤拷锟斤拷要锟斤拷ms锟斤拷锟斤拷系统锟斤拷时锟接斤拷锟斤拷 + //timeout != 0锛岄渶瑕佸皢ms鎹㈡垚绯荤粺鐨勬椂閽熻妭鎷 if (timeout != 0) { - //锟斤拷ms转锟斤拷锟斤拷时锟接斤拷锟斤拷 + //灏唌s杞崲鎴愭椂閽熻妭鎷 wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND); if (wait_tick == 0) { wait_tick = 1; } } else { - wait_tick = TOS_TIME_FOREVER; //一直锟斤拷锟斤拷 + wait_tick = TOS_TIME_FOREVER; //涓鐩撮樆濉 } - //锟饺达拷锟缴癸拷锟斤拷锟斤拷锟斤拷却锟斤拷锟绞憋拷洌拷锟斤拷锟酵憋拷示锟饺达拷锟斤拷时 + //绛夊緟鎴愬姛锛岃绠楃瓑寰呯殑鏃堕棿锛屽惁鍒欏氨琛ㄧず绛夊緟瓒呮椂 if (tos_sem_pend(sem, wait_tick) == K_ERR_NONE) { return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND)); } @@ -231,7 +231,7 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn function, void *arg return NULL; } - /* 锟斤拷锟斤拷MidPriority_Task锟斤拷锟斤拷 */ + /* 鍒涘缓MidPriority_Task浠诲姟 */ rc = tos_task_create(task, (char*)name, function, arg, prio, task_stack, stacksize, 20); if (rc != K_ERR_NONE) { @@ -313,25 +313,25 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *q, void **msg, u32_t timeout) k_tick_t wait_tick = 0; k_tick_t start_tick = 0; - if (!msg) { // 锟斤拷锟斤拷锟芥储锟斤拷息锟侥地凤拷锟角凤拷锟斤拷效 + if (!msg) { // 鐪嬬湅瀛樺偍娑堟伅鐨勫湴鏂规槸鍚︽湁鏁 msg = &dummyptr; } - // 锟斤拷锟饺伙拷取锟斤拷始锟饺达拷锟脚猴拷锟斤拷锟斤拷时锟接斤拷锟斤拷 + // 棣栧厛鑾峰彇寮濮嬬瓑寰呬俊鍙烽噺鐨勬椂閽熻妭鎷 start_tick = sys_now(); - // timeout != 0锟斤拷锟斤拷要锟斤拷ms锟斤拷锟斤拷系统锟斤拷时锟接斤拷锟斤拷 + // timeout != 0锛岄渶瑕佸皢ms鎹㈡垚绯荤粺鐨勬椂閽熻妭鎷 if (timeout != 0) { - //锟斤拷ms转锟斤拷锟斤拷时锟接斤拷锟斤拷 + //灏唌s杞崲鎴愭椂閽熻妭鎷 wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND); if (wait_tick == 0) { wait_tick = 1; } - } else { // 一直锟斤拷锟斤拷 + } else { // 涓鐩撮樆濉 wait_tick = TOS_TIME_FOREVER; } - // 锟饺达拷锟缴癸拷锟斤拷锟斤拷锟斤拷却锟斤拷锟绞憋拷洌拷锟斤拷锟酵憋拷示锟饺达拷锟斤拷时 + // 绛夊緟鎴愬姛锛岃绠楃瓑寰呯殑鏃堕棿锛屽惁鍒欏氨琛ㄧず绛夊緟瓒呮椂 if (tos_msg_q_pend(q,&(*msg), wait_tick) == K_ERR_NONE) { return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND)); }