X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPPI%2FConnectors.cc;h=7290e013326fb8c9e4ca8c79baa5e5709ecaf618;hb=69c137120ce26b83cf37b125c5c54e1eb61f39a3;hp=90c593c004d4d872057254f6892d069b1c03984a;hpb=b733a5d9ca5fa34a65c7ebbe3cf8922f37213671;p=senf.git diff --git a/senf/PPI/Connectors.cc b/senf/PPI/Connectors.cc index 90c593c..7290e01 100644 --- a/senf/PPI/Connectors.cc +++ b/senf/PPI/Connectors.cc @@ -364,19 +364,28 @@ prefix_ void senf::ppi::connector::ActiveConnector::unregisterRoute(ForwardingRo //-///////////////////////////////////////////////////////////////////////////////////////////////// // senf::ppi::connector::InputConnector -prefix_ senf::Packet senf::ppi::connector::InputConnector::operator()() +prefix_ senf::Packet const & senf::ppi::connector::InputConnector::operator()() { + static Packet nullPacket; + if (empty()) v_requestEvent(); - if (! empty()) { - Packet p ( queue_.back()); + if (fastPacket_) { + Packet const * p = fastPacket_; + fastPacket_ = NULL; + v_dequeueEvent(); + SENF_PPI_TRACE(*p, "IN "); + return *p; + } + if (! queue_.empty()) { + slowPacket_ = queue_.back(); queue_.pop_back(); v_dequeueEvent(); - SENF_PPI_TRACE(p, "IN "); - return p; + SENF_PPI_TRACE(slowPacket_, "IN "); + return slowPacket_; } else { - SENF_PPI_TRACE(Packet(), "IN "); - return Packet(); + SENF_PPI_TRACE(nullPacket, "IN "); + return nullPacket; } }