diff options
author | Yash Tibrewal <yashkt@google.com> | 2018-06-05 10:55:13 -0700 |
---|---|---|
committer | Yash Tibrewal <yashkt@google.com> | 2018-06-05 10:55:13 -0700 |
commit | 21e360382f7f022aed6cdd2522ebc33aaf6d7436 (patch) | |
tree | 6e90c90901d507924db32f1e629bf502fe7d9f14 /src/core/lib/iomgr/ev_epoll1_linux.cc | |
parent | 905f0ca39e5a64d91c4c5d7a09bc0768dabfc454 (diff) |
Add more detailed comments
Diffstat (limited to 'src/core/lib/iomgr/ev_epoll1_linux.cc')
-rw-r--r-- | src/core/lib/iomgr/ev_epoll1_linux.cc | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/core/lib/iomgr/ev_epoll1_linux.cc b/src/core/lib/iomgr/ev_epoll1_linux.cc index 356fbae139..1c495b47bc 100644 --- a/src/core/lib/iomgr/ev_epoll1_linux.cc +++ b/src/core/lib/iomgr/ev_epoll1_linux.cc @@ -309,7 +309,9 @@ static grpc_fd* fd_create(int fd, const char* name, bool track_err) { struct epoll_event ev; ev.events = static_cast<uint32_t>(EPOLLIN | EPOLLOUT | EPOLLET); - /* Use the least significant bit of ev.data.ptr to store track_err. */ + /* Use the least significant bit of ev.data.ptr to store track_err. We expect + * the addresses to be word aligned. We need to store track_err to avoid + * synchronization issues when accessing it after receiving an event. */ ev.data.ptr = reinterpret_cast<void*>(reinterpret_cast<intptr_t>(new_fd) | (track_err ? 1 : 0)); if (epoll_ctl(g_epoll_set.epfd, EPOLL_CTL_ADD, fd, &ev) != 0) { @@ -626,7 +628,7 @@ static grpc_error* process_epoll_events(grpc_pollset* pollset) { grpc_fd* fd = reinterpret_cast<grpc_fd*>( reinterpret_cast<intptr_t>(data_ptr) & ~static_cast<intptr_t>(1)); bool track_err = - reinterpret_cast<intptr_t>(data_ptr) & ~static_cast<intptr_t>(1); + reinterpret_cast<intptr_t>(data_ptr) & static_cast<intptr_t>(1); bool cancel = (ev->events & EPOLLHUP) != 0; bool error = (ev->events & EPOLLERR) != 0; bool read_ev = (ev->events & (EPOLLIN | EPOLLPRI)) != 0; |