From 42a02cb2bbc48866d88f20687beea58a78214e15 Mon Sep 17 00:00:00 2001 From: Stefan Sayer Date: Tue, 25 Mar 2008 19:52:32 +0000 Subject: [PATCH] fixed rtp receiver deadlock on RTP packet receiver buffer overflow. clearing buffer on rtp stream initialization git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@825 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/AmRtpReceiver.cpp | 6 +++++- core/AmRtpStream.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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)); +} +