select now uses Erase-Remove idiom for retired fds

Signed-off-by: Mikael Helbo Kjaer <mhk@designtech.dk>
This commit is contained in:
Mikael Helbo Kjaer 2010-11-01 12:54:58 +01:00 committed by Martin Sustrik
parent 085b709021
commit 0ad71f88fe
2 changed files with 11 additions and 9 deletions

View File

@ -191,15 +191,8 @@ void zmq::select_t::loop ()
// Destroy retired event sources. // Destroy retired event sources.
if (retired) { if (retired) {
fd_set_t::iterator it = fds.begin(); fds.erase (std::remove_if (fds.begin (), fds.end (),
while (it != fds.end()) { zmq::select_t::is_retired_fd), fds.end ());
if (it->fd == retired_fd) {
it = fds.erase(it);
}
else {
it++;
}
}
retired = false; retired = false;
} }
} }
@ -209,3 +202,9 @@ void zmq::select_t::worker_routine (void *arg_)
{ {
((select_t*) arg_)->loop (); ((select_t*) arg_)->loop ();
} }
bool zmq::select_t::is_retired_fd (const fd_entry_t &entry)
{
return (entry.fd == retired_fd);
}

View File

@ -77,6 +77,9 @@ namespace zmq
struct i_poll_events *events; struct i_poll_events *events;
}; };
// Checks if an fd_entry_t is retired.
static bool is_retired_fd (const fd_entry_t &entry);
// Set of file descriptors that are used to retreive // Set of file descriptors that are used to retreive
// information for fd_set. // information for fd_set.
typedef std::vector <fd_entry_t> fd_set_t; typedef std::vector <fd_entry_t> fd_set_t;