1. Close the epoll_fd at destroy
2. Finish the comment about signal/broadcast on the cv
3. Rename GPR_POSIX_MULTIPOLL_WITH_EPOLL to
GPR_LINUX_MULTIPOLL_WITH_EPOLL
This is a multipoller based on epoll rather than poll.
Note that this implementation is aimed at correctness rather than
performance, although it should immediately have better scalability to
large numbers of FDs, both due to epoll's O(1) sized API and due to not
needing to wake up polling threads to do interest set changes.
One notable difference here is that we directly attach a wakeup fd
rather than using the freelisting kick mechanism that the poll() based
implementations use, because modifying the epoll set to use a different
kick fd each time isn't free.
This avoids an unnecessary upgrade to multipoller if there was no
do_work called between an orphan and a subsequent add. Additionally, it
avoids the need for epoll based multipoller to check for this case in
its upgrade code by ensuring all existing fds are valid at upgrade time.
- Fixes#405.
- This change is not tested as it should (only end to end and no
negative testing). Will do better when we have testing framework
for filters.
I missed a clause in section 4.4 of the HPACK spec when implementing
this stuff. Removes an errant assert and correctly handles adding large
entries to the HPACK table by flushing it and leaving it empty.