From: Tilghman Lesher Date: Wed, 5 Jan 2011 18:47:46 +0000 (+0000) Subject: Use the sanity check in place of the disconnect/connect cycle. X-Git-Tag: 1.4.40-rc1~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=93782b4eb2135d7b04f5756eda4bc57bc3f3681a;p=thirdparty%2Fasterisk.git 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 --- 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); } }