mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-09 15:26:04 +00:00
select now uses Erase-Remove idiom for retired fds
Signed-off-by: Mikael Helbo Kjaer <mhk@designtech.dk>
This commit is contained in:
parent
085b709021
commit
0ad71f88fe
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user