Merged revisions 137138 via svnmerge from
authorTilghman Lesher <tilghman@meg.abyt.es>
Mon, 11 Aug 2008 00:25:28 +0000 (00:25 +0000)
committerTilghman Lesher <tilghman@meg.abyt.es>
Mon, 11 Aug 2008 00:25:28 +0000 (00:25 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r137138 | tilghman | 2008-08-10 19:20:38 -0500 (Sun, 10 Aug 2008) | 5 lines

Deallocate database connection handle on disconnect, as we allocate another
one on connect.
(closes issue #13271)
 Reported by: dveiga

........

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@137150 65c4cc65-6c06-0410-ace0-fbb531ad65f3

res/res_odbc.c

index 9746c73..7a5d7b3 100644 (file)
@@ -754,16 +754,27 @@ struct odbc_obj *ast_odbc_request_obj(const char *name, int check)
 static odbc_status odbc_obj_disconnect(struct odbc_obj *obj)
 {
        int res;
+       SQLINTEGER err;
+       short int mlen;
+       unsigned char msg[200], stat[10];
+
        ast_mutex_lock(&obj->lock);
 
        res = SQLDisconnect(obj->con);
 
        if (res == ODBC_SUCCESS) {
-               ast_log(LOG_WARNING, "res_odbc: disconnected %d from %s [%s]\n", res, obj->parent->name, obj->parent->dsn);
+               ast_log(LOG_DEBUG, "Disconnected %d from %s [%s]\n", res, obj->parent->name, obj->parent->dsn);
        } else {
-               ast_log(LOG_WARNING, "res_odbc: %s [%s] already disconnected\n",
-               obj->parent->name, obj->parent->dsn);
+               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)) {
+               ast_log(LOG_DEBUG, "Database handle deallocated\n");
+       } else {
+               SQLGetDiagRec(SQL_HANDLE_DBC, obj->con, 1, stat, &err, msg, 100, &mlen);
+               ast_log(LOG_WARNING, "Unable to deallocate database handle? %d errno=%d %s\n", res, (int)err, msg);
+       }
+
        obj->up = 0;
        ast_mutex_unlock(&obj->lock);
        return ODBC_SUCCESS;