diff --git a/core/AmRtpReceiver.cpp b/core/AmRtpReceiver.cpp index 4f4664e3..41b4422e 100644 --- a/core/AmRtpReceiver.cpp +++ b/core/AmRtpReceiver.cpp @@ -101,7 +101,11 @@ void AmRtpReceiver::run() if(it != streams.end()) { AmRtpPacket* p = it->second->newPacket(); if (!p) { - WARN("RTP packet receive buffer full.\n"); + WARN("RTP packet receive buffer full, dropping packet.\n"); + // drop received data + AmRtpPacket dummy; + dummy.recv(tmp_fds[i].fd); + streams_mut.unlock(); continue; } diff --git a/core/AmRtpStream.cpp b/core/AmRtpStream.cpp index f46dd816..cc791655 100644 --- a/core/AmRtpStream.cpp +++ b/core/AmRtpStream.cpp @@ -408,6 +408,7 @@ void AmRtpStream::pause() void AmRtpStream::resume() { gettimeofday(&last_recv_time,NULL); + mem.clear(); } void AmRtpStream::setOnHold(bool on_hold) { @@ -517,3 +518,8 @@ inline void PacketMem::freePacket(AmRtpPacket* p) { used[p-packets] = false; } + +inline void PacketMem::clear() { + memset(used, 0, sizeof(used)); +} +