aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_iax2.c
diff options
context:
space:
mode:
authordvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-21 19:12:55 +0000
committerdvossel <dvossel@f38db490-d61c-443f-a65b-d21fe96a405b>2009-05-21 19:12:55 +0000
commitd822728cae102680af4b88f959b44c77b8ecd702 (patch)
treedd5d93f28aa795cff2e0cf8b323db757d1d7324c /channels/chan_iax2.c
parent995ccac746efd5d28df63ef0116e3c6070a3c049 (diff)
Merged revisions 195995 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk ................ r195995 | dvossel | 2009-05-21 14:11:49 -0500 (Thu, 21 May 2009) | 20 lines Merged revisions 195991 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r195991 | dvossel | 2009-05-21 14:04:56 -0500 (Thu, 21 May 2009) | 14 lines Sign problem calculating timestamp for iax frame leads to no audio on the receiving peer. There are rare cases in which a frame's delivery timestamp is slightly less than the iax2_pvt's offset. This causes the pvt's timestamp to be a small negative number, but since the timestamp value is unsigned it looks like a huge positive number. This patch checks for this negative case and sets the ms to zero. A similar check is already done right below this one in the 'else' statement. (closes issue #15032) Reported by: guillecabeza Patches: chan_iax2.c.patch_timestamp uploaded by guillecabeza (license 380) Tested by: guillecabeza (closes issue #14216) Reported by: Andrey Sofronov ........ ................ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@195997 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_iax2.c')
-rw-r--r--channels/chan_iax2.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 6e0e0d189..e378790ff 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -4427,6 +4427,9 @@ static unsigned int calc_timestamp(struct chan_iax2_pvt *p, unsigned int ts, str
/* If we have a time that the frame arrived, always use it to make our timestamp */
if (delivery && !ast_tvzero(*delivery)) {
ms = ast_tvdiff_ms(*delivery, p->offset);
+ if (ms < 0) {
+ ms = 0;
+ }
if (iaxdebug)
ast_debug(3, "calc_timestamp: call %d/%d: Timestamp slaved to delivery time\n", p->callno, iaxs[p->callno]->peercallno);
} else {