diff --git a/src/streams/netstream.cpp b/src/streams/netstream.cpp
index b935c5b27a6d7ddcd0a66ace801bed0e6829e9c6..7a1cb03556814767a9d1cd42f291f5784c7c3df9 100644
--- a/src/streams/netstream.cpp
+++ b/src/streams/netstream.cpp
@@ -368,6 +368,7 @@ void Net::_run() {
                     }
 
                     auto current = state->buffer.begin();
+                    bool seenEnd = false;
                     for (size_t i = 0; i < size; ++i) {
                         // lk2.unlock();
                         
@@ -375,13 +376,16 @@ void Net::_run() {
 
                         // Should the packet be dispatched yet
                         if (pts == ats) {
-
                             StreamPacket *spkt;
                             DataPacket *pkt;
-        
+
                             spkt = &current->packets.first;
                             pkt = &current->packets.second;
 
+                            if (spkt->channel == Channel::kEndFrame) {
+                                seenEnd = true;
+                            }
+
                             ++state->active;
                             ftl::pool.push([this, buf = &*current, spkt, pkt, state](int ix) {
                                 _processPacket(buf->peer, 0, *spkt, *pkt);
@@ -393,7 +397,9 @@ void Net::_run() {
                             nextTs = std::min(nextTs, next);
                             hasLocalNext = true;
                             hasNext = true;
-                            break;
+                            if (seenEnd) {
+                                break;
+                            }
                         }
 
                         // lk2.lock();