RT-Thread / rt-thread

RT-Thread is an open source IoT Real-Time Operating System (RTOS).
https://www.rt-thread.io
Apache License 2.0
10.47k stars 5.01k forks source link

wait queue 中 __wqueue_default_wake 永远返回的是 0 #4368

Open whj4674672 opened 3 years ago

whj4674672 commented 3 years ago

在等待队列使用的时候会

int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec)
{
    __wait.polling_thread = rt_thread_self();
    __wait.key = 0;
    __wait.wakeup = __wqueue_default_wake;

但是 wake up 这个函数的设计初衷应该是由用户自己来实现这个唤醒函数吧,但是这里默认写了永远返回 0,看起来这个设计是不合理的。

int __wqueue_default_wake(struct rt_wqueue_node *wait, void *key)
{
    return 0;
}

那么设计这个函数的时候,是不是可以考虑增加一个形参或者其他的方式,让用户可以自定义自己的 wake up 函数。

BernardXiong commented 3 years ago

就是让用户来实现另外的,否则就只能是这个用于default 0。

whj4674672 commented 3 years ago

那么在 rt_wqueue_wait 的时候怎么把用户的函数指针传递进来呢?

whj4674672 commented 3 years ago

现有的方式,需要修改 waitqueue.c 的代码。让用户自己传递自己的 wake up 是否更合理

BernardXiong commented 3 years ago

直接结构体赋值,或者再加个API?

whj4674672 commented 3 years ago

加个 API 的方式不会对原来的代码产生任何影响