X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FConnectors.cc;h=6c1dade6bc3da79006227b3a4d85298c2cfe133b;hb=26dafbf86c16535110eeee3e6084111aa7b01e87;hp=a39857ef5519197bdf5327d08b1483c44f7960e3;hpb=c7ddbbb0bc014bdfe6daef91e2d1c512d77e9fff;p=senf.git diff --git a/PPI/Connectors.cc b/PPI/Connectors.cc index a39857e..6c1dade 100644 --- a/PPI/Connectors.cc +++ b/PPI/Connectors.cc @@ -40,7 +40,22 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target) { - SENF_ASSERT( module_ && ! peer_ && target.module_ && ! target.peer_ ); + // The connector is not registered -> route() or noroute() statement missing + SENF_ASSERT( module_ && + "senf::ppi::connector::Connector::connect(): (source) " + "Missing route() or noroute()" ); + // The connector is already connected + SENF_ASSERT( ! peer_ && + "senf::ppi::connector::Connector::connect(): (source) " + "duplicate connection" ); + // The target connector is not registered -> route() or noroute() statement missing + SENF_ASSERT( target.module_ && + "senf::ppi::connector::Connector::connect(): (target) " + "Missing route() or noroute()" ); + // The target connector is already connected + SENF_ASSERT( ! target.peer_ && + "senf::ppi::connector::Connector::connect(): (target) " + "duplicate connection" ); if (! (packetTypeID() == typeid(void) || target.packetTypeID() == typeid(void) || packetTypeID() == target.packetTypeID()) ) @@ -61,7 +76,9 @@ prefix_ void senf::ppi::connector::Connector::connect(Connector & target) prefix_ void senf::ppi::connector::Connector::disconnect() { - SENF_ASSERT( peer_ ); + // Cannot disconnected a non-connected connector + SENF_ASSERT( peer_ && + "senf::ppi::connector::Connector::disconnect(): Not connected" ); Connector & peer (*peer_); peer_ = 0; peer.peer_ = 0; @@ -103,19 +120,12 @@ prefix_ void senf::ppi::connector::PassiveConnector::v_unthrottleEvent() prefix_ void senf::ppi::connector::PassiveConnector::notifyUnthrottle() { - if (throttled() && !nativeThrottled_) { - Routes::const_iterator i (routes_.begin()); - Routes::const_iterator const i_end (routes_.end()); - for (; i != i_end; ++i) - if ((*i)->throttled()) - break; - if (i == i_end) { - remoteThrottled_ = false; - emitUnthrottle(); - } - } - else + if (std::find_if(routes_.begin(), routes_.end(), + boost::bind(&ForwardingRoute::throttled, _1)) == routes_.end()) { remoteThrottled_ = false; + if (!nativeThrottled_) + emitUnthrottle(); + } } ///////////////////////////////////////////////////////////////////////////