summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2006-02-10 15:54:18 +0000
committerHenri Herscher <henri@oreka.org>2006-02-10 15:54:18 +0000
commit60ceb796b2ca9bab5d52951f423566d6ba78be63 (patch)
tree35bb64a6b05a168fc0c24fb9c587914f77167d9e
parentcc42e56c2cb8dcfe467b536f0a4096252b3c5432 (diff)
When replaying pcap file, yield control to other thread at each received packet (flow control)
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@163 09dcff7a-b715-0410-9601-b79a96267cd0
-rw-r--r--orkaudio/audiocaptureplugins/voip/VoIp.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/orkaudio/audiocaptureplugins/voip/VoIp.cpp b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
index 57ae7a9..573b5f9 100644
--- a/orkaudio/audiocaptureplugins/voip/VoIp.cpp
+++ b/orkaudio/audiocaptureplugins/voip/VoIp.cpp
@@ -351,6 +351,15 @@ void HandlePacket(u_char *param, const struct pcap_pkthdr *header, const u_char
int ipHeaderLength = ipHeader->ip_hl*4;
u_char* ipPacketEnd = (u_char*)ipHeader + ipHeader->ip_len;
+ if(!s_liveCapture)
+ {
+ // This is a pcap file replay, make sure Orkaudio won't be flooded by too many
+ // packets at a time by yielding control to other threads.
+ ACE_Time_Value yield;
+ yield.set(0,1); // 1 us
+ ACE_OS::sleep(yield);
+ }
+
if(ipHeader->ip_p == IPPROTO_UDP)
{
UdpHeaderStruct* udpHeader = (UdpHeaderStruct*)((char *)ipHeader + ipHeaderLength);