From 93782b4eb2135d7b04f5756eda4bc57bc3f3681a Mon Sep 17 00:00:00 2001 From: Tilghman Lesher Date: Wed, 5 Jan 2011 18:47:46 +0000 Subject: [PATCH] Use the sanity check in place of the disconnect/connect cycle. The disconnect/connect cycle has the potential to cause random crashes. (closes issue #18243) Reported by: ks3 Patches: res_odbc.patch uploaded by ks3 (license 1147) Tested by: ks3 git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.4@300621 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_odbc.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/res/res_odbc.c b/res/res_odbc.c index 961e300446..9a86f401d5 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -110,26 +110,20 @@ SQLHSTMT ast_odbc_prepare_and_execute(struct odbc_obj *obj, SQLHSTMT (*prepare_c } } - ast_log(LOG_WARNING, "SQL Execute error %d! Attempting a reconnect...\n", res); + ast_log(LOG_WARNING, "SQL Execute error %d! Verifying connection to %s [%s]...\n", res, obj->parent->name, obj->parent->dsn); SQLFreeHandle(SQL_HANDLE_STMT, stmt); stmt = NULL; - obj->up = 0; - /* - * While this isn't the best way to try to correct an error, this won't automatically - * fail when the statement handle invalidates. - */ - /* XXX Actually, it might, if we're using a non-pooled connection. Possible race here. XXX */ - odbc_obj_disconnect(obj); - odbc_obj_connect(obj); + if (!ast_odbc_sanity_check(obj)) { + break; + } continue; } else obj->last_used = ast_tvnow(); break; } else { - ast_log(LOG_WARNING, "SQL Prepare failed. Attempting a reconnect...\n"); - odbc_obj_disconnect(obj); - odbc_obj_connect(obj); + ast_log(LOG_WARNING, "SQL Prepare failed. Verifying connection to %s [%s]\n", obj->parent->name, obj->parent->dsn); + ast_odbc_sanity_check(obj); } } -- 2.47.2