diff options
author | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-10-02 15:19:58 +0000 |
---|---|---|
committer | tilghman <tilghman@f38db490-d61c-443f-a65b-d21fe96a405b> | 2008-10-02 15:19:58 +0000 |
commit | b8dca00296c36820cac98ccf9a8f3b2ff2dee037 (patch) | |
tree | f11a60ec7d373e94d99507031f4ca567ec041825 | |
parent | d27b1568999a55a32a0a931ae20322e3e7a000e9 (diff) |
Merged revisions 145752 via svnmerge from
https://origsvn.digium.com/svn/asterisk/trunk
................
r145752 | tilghman | 2008-10-02 10:17:16 -0500 (Thu, 02 Oct 2008) | 10 lines
Merged revisions 145751 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r145751 | tilghman | 2008-10-02 10:13:21 -0500 (Thu, 02 Oct 2008) | 3 lines
Some sanity checks that may have led to prior crashes, found by codefreeze-lap
(murf) on IRC. Also some cleanup of incorrectly-used constants.
........
................
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@145754 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | res/res_odbc.c | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/res/res_odbc.c b/res/res_odbc.c index 7a5d7b3dc..62f2f51f7 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -758,17 +758,23 @@ static odbc_status odbc_obj_disconnect(struct odbc_obj *obj) short int mlen; unsigned char msg[200], stat[10]; + /* Nothing to disconnect */ + if (!obj->con) { + return ODBC_SUCCESS; + } + ast_mutex_lock(&obj->lock); res = SQLDisconnect(obj->con); - if (res == ODBC_SUCCESS) { + if (res == SQL_SUCCESS || res == SQL_SUCCESS_WITH_INFO) { ast_log(LOG_DEBUG, "Disconnected %d from %s [%s]\n", res, obj->parent->name, obj->parent->dsn); } else { ast_log(LOG_DEBUG, "res_odbc: %s [%s] already disconnected\n", obj->parent->name, obj->parent->dsn); } - if ((res = SQLFreeHandle(SQL_HANDLE_DBC, obj->con) == ODBC_SUCCESS)) { + if ((res = SQLFreeHandle(SQL_HANDLE_DBC, obj->con) == SQL_SUCCESS)) { + obj->con = NULL; ast_log(LOG_DEBUG, "Database handle deallocated\n"); } else { SQLGetDiagRec(SQL_HANDLE_DBC, obj->con, 1, stat, &err, msg, 100, &mlen); @@ -792,6 +798,13 @@ static odbc_status odbc_obj_connect(struct odbc_obj *obj) #endif ast_mutex_lock(&obj->lock); + if (obj->up) { + odbc_obj_disconnect(obj); + ast_log(LOG_NOTICE, "Re-connecting %s\n", obj->parent->name); + } else { + ast_log(LOG_NOTICE, "Connecting %s\n", obj->parent->name); + } + res = SQLAllocHandle(SQL_HANDLE_DBC, obj->parent->env, &obj->con); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { @@ -806,13 +819,6 @@ static odbc_status odbc_obj_connect(struct odbc_obj *obj) SQLSetConnectAttr(obj->con, SQL_ATTR_TRACEFILE, tracefile, strlen(tracefile)); #endif - if (obj->up) { - odbc_obj_disconnect(obj); - ast_log(LOG_NOTICE, "Re-connecting %s\n", obj->parent->name); - } else { - ast_log(LOG_NOTICE, "Connecting %s\n", obj->parent->name); - } - res = SQLConnect(obj->con, (SQLCHAR *) obj->parent->dsn, SQL_NTS, (SQLCHAR *) obj->parent->username, SQL_NTS, |