提交 a305edd4 编写于 作者: L liuxianliang 提交者: guo

[fix] memory leak when the value of posix semaphore is zero.

上级 d3139706
...@@ -39,7 +39,9 @@ static void posix_sem_delete(sem_t *psem) ...@@ -39,7 +39,9 @@ static void posix_sem_delete(sem_t *psem)
posix_sem_list = psem->next; posix_sem_list = psem->next;
rt_sem_delete(psem->sem); rt_sem_delete(psem->sem);
rt_free(psem);
if(psem->unamed == 0)
rt_free(psem);
return; return;
} }
...@@ -55,7 +57,9 @@ static void posix_sem_delete(sem_t *psem) ...@@ -55,7 +57,9 @@ static void posix_sem_delete(sem_t *psem)
/* delete RT-Thread mqueue */ /* delete RT-Thread mqueue */
rt_sem_delete(psem->sem); rt_sem_delete(psem->sem);
rt_free(psem);
if(psem->unamed == 0)
rt_free(psem);
return ; return ;
} }
...@@ -107,8 +111,6 @@ RTM_EXPORT(sem_close); ...@@ -107,8 +111,6 @@ RTM_EXPORT(sem_close);
int sem_destroy(sem_t *sem) int sem_destroy(sem_t *sem)
{ {
rt_err_t result;
if ((!sem) || !(sem->unamed)) if ((!sem) || !(sem->unamed))
{ {
rt_set_errno(EINVAL); rt_set_errno(EINVAL);
...@@ -118,8 +120,7 @@ int sem_destroy(sem_t *sem) ...@@ -118,8 +120,7 @@ int sem_destroy(sem_t *sem)
/* lock posix semaphore list */ /* lock posix semaphore list */
rt_sem_take(&posix_sem_lock, RT_WAITING_FOREVER); rt_sem_take(&posix_sem_lock, RT_WAITING_FOREVER);
result = rt_sem_trytake(sem->sem); if(rt_list_len(&sem->sem->parent.suspend_thread) != 0)
if (result != RT_EOK)
{ {
rt_sem_release(&posix_sem_lock); rt_sem_release(&posix_sem_lock);
rt_set_errno(EBUSY); rt_set_errno(EBUSY);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册