// $Id$
//
-// Copyright (C) 2008
+// Copyright (C) 2008
// Fraunhofer Institute for Open Communication Systems (FOKUS)
// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
std::pair<FdSet::iterator,FdSet::iterator> range (fds_.equal_range(event));
int events (0);
for (FdSet::iterator i (range.first); i != range.second; ++i)
- events |= i->events_;
+ events |= i->events_;
if (event.events_ & events)
- throw FdEvent::DuplicateEventRegistrationException();
+ throw FdEvent::DuplicateEventRegistrationException() << "vinfo: " << event.v_info();
if (! detail::FdManager::instance().set(event.fd_, events | event.events_, &event))
return false;
std::pair<FdSet::iterator,FdSet::iterator> range (fds_.equal_range(event));
if (range.first == range.second)
- detail::FdManager::instance().remove(event.fd_);
+ detail::FdManager::instance().remove(event.fd_);
else {
int events (0);
for (FdSet::iterator i (range.first); i != range.second; ++i)
events |= i->events_;
- detail::FdManager::instance().set(event.fd_, events, &(*range.first));
+ detail::FdManager::instance().set(event.fd_, events, &(*range.first));
}
}
std::pair<FdSet::iterator,FdSet::iterator> range (fds_.equal_range(event));
int events (0);
for (FdSet::iterator i (range.first); i != range.second; ++i)
- events |= i->events_;
+ events |= i->events_;
if (event.events_ & events)
- throw FdEvent::DuplicateEventRegistrationException();
+ throw FdEvent::DuplicateEventRegistrationException() << "vinfo: " << event.v_info();
detail::FIFORunner::instance().enqueue(&event);
fds_.insert(range.first, event);
disable();
events_ = events;
if (en)
- enabled();
+ enabled();
return *this;
}
detail::FdDispatcher::FdSet::iterator const i_end (detail::FdDispatcher::instance().fds_.end());
bool all ((events & (EV_ERR | EV_HUP)) && ! (events & (EV_READ | EV_PRIO | EV_WRITE)));
for (; i != i_end && fd_ == i->fd_; ++i) {
- i->signaledEvents_ = events;
- if (i->events_ & events || all)
- i->setRunnable();
+ i->signaledEvents_ = events & (EV_ERR | EV_HUP | i->events_);
+ if (i->events_ & events || all)
+ i->setRunnable();
}
}
#undef prefix_
//#include "FdEvent.mpp"
-\f
+
// Local Variables:
// mode: c++
// fill-column: 100