diff options
Diffstat (limited to 'src/poll.cpp')
| -rw-r--r-- | src/poll.cpp | 51 | 
1 files changed, 12 insertions, 39 deletions
| diff --git a/src/poll.cpp b/src/poll.cpp index 1b203db..5ef2ebe 100644 --- a/src/poll.cpp +++ b/src/poll.cpp @@ -4,16 +4,16 @@      This file is part of 0MQ.      0MQ is free software; you can redistribute it and/or modify it under -    the terms of the Lesser GNU General Public License as published by +    the terms of the GNU Lesser General Public License as published by      the Free Software Foundation; either version 3 of the License, or      (at your option) any later version.      0MQ is distributed in the hope that it will be useful,      but WITHOUT ANY WARRANTY; without even the implied warranty of      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the -    Lesser GNU General Public License for more details. +    GNU Lesser General Public License for more details. -    You should have received a copy of the Lesser GNU General Public License +    You should have received a copy of the GNU Lesser General Public License      along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ @@ -54,9 +54,6 @@ zmq::poll_t::poll_t () :  zmq::poll_t::~poll_t ()  {      worker.stop (); - -    //  Make sure there are no fds registered on shutdown. -    zmq_assert (load.get () == 0);  }  zmq::poll_t::handle_t zmq::poll_t::add_fd (fd_t fd_, i_poll_events *events_) @@ -69,7 +66,7 @@ zmq::poll_t::handle_t zmq::poll_t::add_fd (fd_t fd_, i_poll_events *events_)      fd_table [fd_].events = events_;      //  Increase the load metric of the thread. -    load.add (1); +    adjust_load (1);      return fd_;  } @@ -85,7 +82,7 @@ void zmq::poll_t::rm_fd (handle_t handle_)      retired = true;      //  Decrease the load metric of the thread. -    load.sub (1); +    adjust_load (-1);  }  void zmq::poll_t::set_pollin (handle_t handle_) @@ -112,23 +109,6 @@ void zmq::poll_t::reset_pollout (handle_t handle_)      pollset [index].events &= ~((short) POLLOUT);  } -void zmq::poll_t::add_timer (i_poll_events *events_) -{ -     timers.push_back (events_); -} - -void zmq::poll_t::cancel_timer (i_poll_events *events_) -{ -    timers_t::iterator it = std::find (timers.begin (), timers.end (), events_); -    if (it != timers.end ()) -        timers.erase (it); -} - -int zmq::poll_t::get_load () -{ -    return load.get (); -} -  void zmq::poll_t::start ()  {      worker.start (worker_routine, this); @@ -143,27 +123,20 @@ void zmq::poll_t::loop ()  {      while (!stopping) { +        //  Execute any due timers. +        int timeout = (int) execute_timers (); +          //  Wait for events. -        int rc = poll (&pollset [0], pollset.size (), -            timers.empty () ? -1 : max_timer_period); +        int rc = poll (&pollset [0], pollset.size (), timeout ? timeout : -1);          if (rc == -1 && errno == EINTR)              continue;          errno_assert (rc != -1); -        //  Handle timer. -        if (!rc) { - -            //  Use local list of timers as timer handlers may fill new timers -            //  into the original array. -            timers_t t; -            std::swap (timers, t); - -            //  Trigger all the timers. -            for (timers_t::iterator it = t.begin (); it != t.end (); it ++) -                (*it)->timer_event (); +        //  If there are no events (i.e. it's a timeout) there's no point +        //  in checking the pollset. +        if (rc == 0)              continue; -        }          for (pollset_t::size_type i = 0; i != pollset.size (); i++) { | 
