- 论坛徽章:
- 0
|
我帮lz问两个问题吧?
- for (;;) {
- 890 set_current_state(TASK_INTERRUPTIBLE);
- 891 skb = skb_dequeue(&sk->sk_receive_queue);
- 892 if (skb != NULL)
- 893 break;
- 894 if (!signal_pending(current)) {
- 895 schedule();
- 896 continue;
- 897 }
- 898 ret = -ERESTARTSYS;
- 899 break;
- 900 }
复制代码
1. 当skb为NULL, 且没有signal pending的时候, 则重新schedule.
问题:为什么schedule之后, 不尝试从sk->receive_queue中取数据, 然后如果是null再continue呢?
例如:
当它schedule到另外一个task后,突然接收到一个报文存到recevice_queue中, 然后从schedule返回后, 如果按照现在的写法, 它会执行continue的动作.
2. skb为NULL, 且有signal pending为何要从新执行一次sys_call, 是不是在执行irda_accept之前会处理信号的handler(没看代码, 想确认下) |
|