- 論壇徽章:
- 0
|
本帖最后由 peimichael 于 2012-02-27 09:55 編輯
最近看TCP協(xié)議棧時(shí)在tcp_rcv_established函數(shù)里看到這么一段- if ([color=Red]tp->ucopy.task == current[/color] &&
- sock_owned_by_user(sk) && !copied_early) {
- __set_current_state(TASK_RUNNING);
- /*tcp_copy_to_iovec返回0為成功*/
- if (!tcp_copy_to_iovec(sk, skb, tcp_header_len))
- eaten = 1;
- }
復(fù)制代碼 上面紅字部分不明白有什么用,為什么一定要保證ucopy.task==current?
實(shí)際上一般進(jìn)程調(diào)用recv阻塞后不就切換走了?上面這個(gè)條件如何滿足?
我覺得可能是在進(jìn)程上下文處理prequeue或者backlog時(shí)才會(huì)進(jìn)入這個(gè)條件,但如果是這種情況,似乎又不需要__set_current_state(TASK_RUNNING)這句話了。
特來求助。
多謝! |
|