Skip to content

Commit cf85c88

Browse files
committed
fix(osal/usb_osal_ucosiii): lock before free
Signed-off-by: sakumisu <1203593632@qq.com>
1 parent 39bff0f commit cf85c88

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

osal/usb_osal_ucosiii.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ void usb_osal_thread_delete(usb_osal_thread_t thread)
8484
{
8585
OS_ERR err;
8686
OS_TCB *tcb;
87+
CPU_SR_ALLOC();
8788

89+
CPU_CRITICAL_ENTER();
8890
if (thread == NULL) {
8991
tcb = OSTCBCurPtr;
9092
} else {
@@ -93,6 +95,7 @@ void usb_osal_thread_delete(usb_osal_thread_t thread)
9395

9496
OSTaskDel(tcb, &err);
9597
usb_osal_free(tcb);
98+
CPU_CRITICAL_EXIT();
9699
}
97100

98101
void usb_osal_thread_schedule_other(void)
@@ -131,9 +134,12 @@ usb_osal_sem_t usb_osal_sem_create(uint32_t initial_count)
131134
void usb_osal_sem_delete(usb_osal_sem_t sem)
132135
{
133136
OS_ERR err;
137+
CPU_SR_ALLOC();
134138

139+
CPU_CRITICAL_ENTER();
135140
OSSemDel((OS_SEM *)sem, OS_OPT_DEL_ALWAYS, &err);
136141
usb_osal_free(sem);
142+
CPU_CRITICAL_EXIT();
137143
}
138144

139145
int usb_osal_sem_take(usb_osal_sem_t sem, uint32_t timeout)
@@ -197,9 +203,12 @@ usb_osal_mutex_t usb_osal_mutex_create(void)
197203
void usb_osal_mutex_delete(usb_osal_mutex_t mutex)
198204
{
199205
OS_ERR err;
206+
CPU_SR_ALLOC();
200207

208+
CPU_CRITICAL_ENTER();
201209
OSMutexDel((OS_MUTEX *)mutex, OS_OPT_DEL_ALWAYS, &err);
202210
usb_osal_free(mutex);
211+
CPU_CRITICAL_EXIT();
203212
}
204213

205214
int usb_osal_mutex_take(usb_osal_mutex_t mutex)
@@ -251,9 +260,12 @@ usb_osal_mq_t usb_osal_mq_create(uint32_t max_msgs)
251260
void usb_osal_mq_delete(usb_osal_mq_t mq)
252261
{
253262
OS_ERR err;
263+
CPU_SR_ALLOC();
254264

265+
CPU_CRITICAL_ENTER();
255266
OSQDel((OS_Q *)mq, OS_OPT_DEL_ALWAYS, &err);
256267
usb_osal_free(mq);
268+
CPU_CRITICAL_EXIT();
257269
}
258270

259271
int usb_osal_mq_send(usb_osal_mq_t mq, uintptr_t addr)
@@ -354,11 +366,14 @@ struct usb_osal_timer *usb_osal_timer_create(const char *name, uint32_t timeout_
354366
void usb_osal_timer_delete(struct usb_osal_timer *timer)
355367
{
356368
OS_ERR err;
369+
CPU_SR_ALLOC();
357370

371+
CPU_CRITICAL_ENTER();
358372
OSTmrStop((OS_TMR *)timer->timer, OS_OPT_TMR_NONE, NULL, &err);
359373
OSTmrDel((OS_TMR *)timer->timer, &err);
360374
usb_osal_free(timer->timer);
361375
usb_osal_free(timer);
376+
CPU_CRITICAL_EXIT();
362377
}
363378

364379
void usb_osal_timer_start(struct usb_osal_timer *timer)

0 commit comments

Comments
 (0)