X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fio%2Funix%2Fpoll.cpp;h=0fb9d22e03919476e95d52e09ca5faf10088241f;hp=6272b4dbf143e26aba3331117e284d1b690dbac7;hb=292aed8e23ea543b089d5f2a73000de4640befe7;hpb=754132d5541ff9db869ef22e7863097110545339;ds=sidebyside diff --git a/source/io/unix/poll.cpp b/source/io/unix/poll.cpp index 6272b4d..0fb9d22 100644 --- a/source/io/unix/poll.cpp +++ b/source/io/unix/poll.cpp @@ -57,17 +57,24 @@ namespace IO { void Poller::rebuild_array() { - priv->pfd.clear(); + if(objs_changed) + { + priv->pfd.clear(); + priv->pfd.reserve(objects.size()); - for(EventMap::iterator i=objects.begin(); i!=objects.end(); ++i) + for(vector::const_iterator i=objects.begin(); i!=objects.end(); ++i) + { + pollfd p; + p.fd = *i->object->get_event_handle(); + p.events = sys_poll_event(i->events); + priv->pfd.push_back(p); + } + } + else { - pollfd p; - p.fd = *i->first->get_event_handle(); - p.events = sys_poll_event(i->second); - priv->pfd.push_back(p); + for(unsigned i=0; ipfd[i].events = sys_poll_event(objects[i].events); } - - objs_changed = false; } void Poller::platform_poll(int timeout) @@ -81,11 +88,10 @@ void Poller::platform_poll(int timeout) throw system_error("poll"); } - EventMap::iterator j = objects.begin(); - for(vector::iterator i=priv->pfd.begin(); (i!=priv->pfd.end() && ret>0); ++i, ++j) - if(i->revents) + for(unsigned i=0; (i0); ++i) + if(priv->pfd[i].revents) { - poll_result.push_back(Slot(j->first, poll_event_from_sys(i->revents))); + poll_result.push_back(Slot(objects[i].object, poll_event_from_sys(priv->pfd[i].revents))); --ret; } }