From: Richard Mudgett Date: Sat, 21 Jan 2012 00:20:07 +0000 (+0000) Subject: Fix ast_app_dtget() time unit inconsistency. X-Git-Tag: 1.8.10.0-rc1~28 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8a536e73cbb912d2db6d05932e788991fd91e973;p=thirdparty%2Fasterisk.git Fix ast_app_dtget() time unit inconsistency. Note: Noone calls ast_app_dtget() with the timeout parameter of zero so the bad code normally will never get executed. * Fix unnecessary floating point division in func_timeout.c timeout_write() when all other values are integers. (closes issue ASTERISK-16817) Reported by: Dmitry Andrianov git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@352029 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/funcs/func_timeout.c b/funcs/func_timeout.c index 53bbab7531..d15e28f8dc 100644 --- a/funcs/func_timeout.c +++ b/funcs/func_timeout.c @@ -171,7 +171,7 @@ static int timeout_write(struct ast_channel *chan, const char *cmd, char *data, case 'r': case 'R': if (chan->pbx) { - chan->pbx->rtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000.0; + chan->pbx->rtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000; ast_verb(3, "Response timeout set to %.3f\n", chan->pbx->rtimeoutms / 1000.0); } break; @@ -179,7 +179,7 @@ static int timeout_write(struct ast_channel *chan, const char *cmd, char *data, case 'd': case 'D': if (chan->pbx) { - chan->pbx->dtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000.0; + chan->pbx->dtimeoutms = when.tv_sec * 1000 + when.tv_usec / 1000; ast_verb(3, "Digit timeout set to %.3f\n", chan->pbx->dtimeoutms / 1000.0); } break; diff --git a/main/app.c b/main/app.c index 7a3735cc79..b48d2bfde4 100644 --- a/main/app.c +++ b/main/app.c @@ -108,7 +108,7 @@ static AST_RWLIST_HEAD_STATIC(groups, ast_group_info); * \param collect * \param size * \param maxlen - * \param timeout timeout in seconds + * \param timeout timeout in milliseconds * * \return 0 if extension does not exist, 1 if extension exists */ @@ -121,10 +121,12 @@ int ast_app_dtget(struct ast_channel *chan, const char *context, char *collect, maxlen = size; } - if (!timeout && chan->pbx) { - timeout = chan->pbx->dtimeoutms / 1000.0; - } else if (!timeout) { - timeout = 5; + if (!timeout) { + if (chan->pbx && chan->pbx->dtimeoutms) { + timeout = chan->pbx->dtimeoutms; + } else { + timeout = 5000; + } } if ((ts = ast_get_indication_tone(chan->zone, "dial"))) {