[asterisk-dev] No audio? Update your Asterisk
Luigi Rizzo
rizzo at icir.org
Wed Jan 25 04:13:19 MST 2006
On Wed, Jan 25, 2006 at 10:59:00AM +0100, Olle E Johansson wrote:
> This morning we discovered a serious bug that stopped all bridged audio
> in our Asterisk servers. Mark found the problem and soon fixed it.
>
> If you get this problem today, please update your Asterisk server. A fix
> has been commited to the subversion repository for 1.2 as well as trunk.
>
> A fixed 1.2.3 release will be published on ftp.digium.com as soon as we
> can find a release engineer (consider the time zone problem).
>
> A big thank you to everyone in the IRC channel that helped us locate
> this issue and to Mark that fixed it so quickly.
a good way to identify these bugs would be to change
ast_timediff_ms() to log values that are clearly out
of range, and return a properly saturated value
in those cases.
Code below - i have no web access at the moment,
but tried it and it spotted the bug before it was fixed.
(adding code to print a backtrace would even
point straight to the list of offending calls,
i have code for that as well if someone is interested).
cheers
luigi
AST_INLINE_API(
int ast_tvdiff_ms(struct timeval end, struct timeval start),
{
/* the offset by 1,000,000 below is intentional...
it avoids differences in the way that division
is handled for positive and negative numbers, by ensuring
that the divisor is always positive
*/
int a = end.tv_sec - start.tv_sec;
const int lim = 1<<21; /* max 21 bits, so the *1000 scaling will still fit in a 32-bit int */
if (a > lim || a < -lim) {
ast_log(LOG_WARNING, "tvdiff too large, saturating %d\n", a);
a = (a > lim) ? lim : -lim;
}
return (a * 1000) +
(((1000000 + end.tv_usec - start.tv_usec) / 1000) - 1000);
}
)
More information about the asterisk-dev
mailing list