void middleman_event_handler::alteration(continuable* ptr, event_bitmask e, fd_meta_event etype) { native_socket_type fd; switch (e) { case event::read: fd = ptr->read_handle(); break; case event::write: { fd = ptr->write_handle(); break; } case event::both: { fd = ptr->read_handle(); auto wrfd = ptr->write_handle(); if (fd != wrfd) { CPPA_LOG_DEBUG("read_handle != write_handle, split " "into two function calls"); // split into two function calls e = event::read; alteration(ptr, event::write, etype); } break; } default: CPPA_CRITICAL("invalid bitmask"); return; } m_alterations.emplace_back(fd_meta_info(fd, ptr, e), etype); }
void alteration(const continuable_reader_ptr& ptr, event_bitmask e, fd_meta_event etype) { native_socket_type fd; switch (e) { case event::read: fd = ptr->read_handle(); break; case event::write: { auto wptr = ptr->as_io(); if (wptr) fd = wptr->write_handle(); else { CPPA_LOG_ERROR("ptr->downcast() returned nullptr"); return; } break; } case event::both: { fd = ptr->read_handle(); auto wptr = ptr->as_io(); if (wptr) { auto wrfd = wptr->write_handle(); if (fd != wrfd) { CPPA_LOG_DEBUG("read_handle != write_handle, split " "into two function calls"); // split into two function calls e = event::read; alteration(ptr, event::write, etype); } } else { CPPA_LOG_ERROR("ptr->downcast() returned nullptr"); return; } break; } default: CPPA_LOG_ERROR("invalid bitmask"); return; } m_alterations.emplace_back(fd_meta_info(fd, ptr, e), etype); }