X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FFdEvent.cc;h=9cfb4108c7d67d0221aeec0da177d9b87f3a9a21;hb=f2f5d59e83863f3b513950173baee1b6da2aee3c;hp=e3500ca14176ccc9a49658d4855c9cb6653ef987;hpb=2da517bbcdb2af10d2322fc762ca27774b53b435;p=senf.git diff --git a/Scheduler/FdEvent.cc b/Scheduler/FdEvent.cc index e3500ca..9cfb410 100644 --- a/Scheduler/FdEvent.cc +++ b/Scheduler/FdEvent.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -50,9 +50,9 @@ prefix_ bool senf::scheduler::detail::FdDispatcher::add(FdEvent & event) std::pair 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; @@ -70,12 +70,12 @@ prefix_ void senf::scheduler::detail::FdDispatcher::remove(FdEvent & event) std::pair 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)); } } @@ -87,9 +87,9 @@ prefix_ void senf::scheduler::detail::FileDispatcher::add(FdEvent & event) std::pair 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); @@ -153,7 +153,7 @@ prefix_ senf::scheduler::FdEvent & senf::scheduler::FdEvent::events(int events) disable(); events_ = events; if (en) - enabled(); + enabled(); return *this; } @@ -163,9 +163,9 @@ prefix_ void senf::scheduler::FdEvent::signal(int events) 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(); } } @@ -201,7 +201,7 @@ prefix_ std::string senf::scheduler::FdEvent::v_info() #undef prefix_ //#include "FdEvent.mpp" - + // Local Variables: // mode: c++ // fill-column: 100