How does one get asterisk to timeout realtime request via res_odbc to unixODBC? I've set timeouts as appropriate for freetds (which unixODBC is using.) However, it doesn't seem to work. It takes over 3 minutes to timeout a connection and queries never seem to timeout, so a channel waiting on a query never terminates. I did notice that res_odbc.c never sets a timeout on the query using something like this: SQLSetStmtAttr( hstmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER)10, 0 ); Has anyone tested this? Is it just failing for FreeTDS connections? (I don't have anything else.) Norman Franke ASD, Inc. -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.digium.com/pipermail/asterisk-users/attachments/20080110/b8270eb7/attachment.htm
Tilghman Lesher
2008-Jan-12 00:39 UTC
[asterisk-users] Asterisk Realtime unixODBC timeout?
On Thursday 10 January 2008 16:52:11 Norman Franke wrote:> How does one get asterisk to timeout realtime request via res_odbc to > unixODBC? I've set timeouts as appropriate for freetds (which > unixODBC is using.) However, it doesn't seem to work. It takes over 3 > minutes to timeout a connection and queries never seem to timeout, so > a channel waiting on a query never terminates. > > I did notice that res_odbc.c never sets a timeout on the query using > something like this: > > SQLSetStmtAttr( hstmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER)10, 0 ); > > Has anyone tested this? Is it just failing for FreeTDS connections? > (I don't have anything else.)I'm hesitant to implement a timeout like this without making the value settable by the user in some way, and there isn't a good way to do that from the res_odbc level (especially since some queries, especially from func_odbc, could take a good period of time). The right place to set statement attributes like this would be in the prepare callback, which is a little better, because the timeout can be adapted to the particular query which is being executed (shorter for realtime, longer for custom queries). -- Tilghman