2016-08-06 4 views
0

Функция epoll_insert вызывается sys_epoll_ctl.Детальная функция о epoll_insert

Есть некоторые ключевые шаги в epoll_insert функции:

  1. Присвоить таблицу опроса, используя функцию обратного вызова очереди: ep_ptable_queue_proc

  2. И будет называть file->f_op->poll

  3. Если файл уже «готов», затем мы отбрасываем его в готовом виде

    /* If the file is already "ready" we drop it inside the ready list */ 
    if ((revents & event->events) && !ep_is_linked(&epi->rdllink)) { 
    
        list_add_tail(&epi->rdllink, &ep->rdllist); 
    
        /* Notify waiting tasks that events are available */ 
        if (waitqueue_active(&ep->wq)) 
         wake_up_locked(&ep->wq); 
        if (waitqueue_active(&ep->poll_wait)) 
         pwake++; 
    } 
    

Я не понимаю, почему проверить, готов ли файл в epoll_insert функции. Должны ли мы проверить его в функции ep_poll_callback?

ответ

2

ep_poll_callback вызывается только при изменении состояния одного из файловых дескрипторов. Если бы это было единственное место, где дескрипторы epoll были добавлены в список чтения, вы могли бы пропустить события, которые произошли до того, как вам удалось добавить их в epoll. Например, на веб-сервере вы можете пропустить запрос клиента, если он был отправлен сразу после подключения.