- 論壇徽章:
- 0
|
我?guī)蚻z問兩個問題吧?
- 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 }
復(fù)制代碼
1. 當(dāng)skb為NULL, 且沒有signal pending的時候, 則重新schedule.
問題:為什么schedule之后, 不嘗試從sk->receive_queue中取數(shù)據(jù), 然后如果是null再continue呢?
例如:
當(dāng)它schedule到另外一個task后,突然接收到一個報文存到recevice_queue中, 然后從schedule返回后, 如果按照現(xiàn)在的寫法, 它會執(zhí)行continue的動作.
2. skb為NULL, 且有signal pending為何要從新執(zhí)行一次sys_call, 是不是在執(zhí)行irda_accept之前會處理信號的handler(沒看代碼, 想確認(rèn)下) |
|