Ticket #7961: boost-1.53.0b1-asio-epoll-reactor.patch

File boost-1.53.0b1-asio-epoll-reactor.patch, 1.7 KB (added by Nikki Chumakov <nikkikom@…>, 10 years ago)

Suggested patch for boost-1.53b1

  • boost/asio/detail/epoll_reactor.hpp

    diff -Nuar boost_1_49_0-1.53/boost/asio/detail/epoll_reactor.hpp boost_1_49_0/boost/asio/detail/epoll_reactor.hpp
    old new  
    6262    int descriptor_;
    6363    boost::uint32_t registered_events_;
    6464    op_queue<reactor_op> op_queue_[max_ops];
     65    bool connected_;
    6566    bool shutdown_;
    6667
    6768    BOOST_ASIO_DECL descriptor_state();
  • boost/asio/detail/impl/epoll_reactor.ipp

    diff -Nuar boost_1_49_0-1.53/boost/asio/detail/impl/epoll_reactor.ipp boost_1_49_0/boost/asio/detail/impl/epoll_reactor.ipp
    old new  
    155155
    156156    descriptor_data->reactor_ = this;
    157157    descriptor_data->descriptor_ = descriptor;
     158    descriptor_data->connected_ = false;
    158159    descriptor_data->shutdown_ = false;
    159160  }
    160161
     
    180181
    181182    descriptor_data->reactor_ = this;
    182183    descriptor_data->descriptor_ = descriptor;
     184    descriptor_data->connected_ = false;
    183185    descriptor_data->shutdown_ = false;
    184186    descriptor_data->op_queue_[op_type].push(op);
    185187  }
     
    615617  static const int flag[max_ops] = { EPOLLIN, EPOLLOUT, EPOLLPRI };
    616618  for (int j = max_ops - 1; j >= 0; --j)
    617619  {
    618     if (events & (flag[j] | EPOLLERR | EPOLLHUP))
     620    if (events & (flag[j] | EPOLLERR | (connected_ ? EPOLLHUP : 0)))
    619621    {
    620622      while (reactor_op* op = op_queue_[j].front())
    621623      {
     624        if (j == connect_op)
     625          connected_ = true;
     626
    622627        if (op->perform())
    623628        {
    624629          op_queue_[j].pop();