diff options
author | tdonovan <tdonovan@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 18:34:57 +0000 |
---|---|---|
committer | tdonovan <tdonovan@13f79535-47bb-0310-9956-ffa450edef68> | 2008-06-17 18:34:57 +0000 |
commit | cc8b2edbd3a854ee7910a2b916c774b0965e2ead (patch) | |
tree | 5a7f86f6bf359534795f9c1ec8e87fcc90e827d6 | |
parent | 586da2a1dec7bdc2fb2586bb6780facefe688a20 (diff) | |
download | libapr-util-cc8b2edbd3a854ee7910a2b916c774b0965e2ead.tar.gz |
don't try to close results or stmts in a cleanup if the connection has already been manually closed
git-svn-id: http://svn.apache.org/repos/asf/apr/apr-util/trunk@668784 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | dbd/apr_dbd_odbc.c | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/dbd/apr_dbd_odbc.c b/dbd/apr_dbd_odbc.c index 47652e74..b3cfdffd 100644 --- a/dbd/apr_dbd_odbc.c +++ b/dbd/apr_dbd_odbc.c @@ -293,10 +293,11 @@ static apr_status_t odbc_close_results(void *d) { apr_dbd_results_t *dbr = (apr_dbd_results_t *) d; SQLRETURN rc = SQL_SUCCESS; - if (dbr && !dbr->isclosed) { - rc = SQLCloseCursor(dbr->stmt); + if (dbr && dbr->apr_dbd && dbr->apr_dbd->dbc) { + if (!dbr->isclosed) + rc = SQLCloseCursor(dbr->stmt); + dbr->isclosed = 1; } - dbr->isclosed = 1; return APR_FROM_SQL_RESULT(rc); } @@ -305,12 +306,15 @@ static apr_status_t odbc_close_pstmt(void *s) { SQLRETURN rc = APR_SUCCESS; apr_dbd_prepared_t *statement = s; - SQLHANDLE hstmt = statement->stmt; /* stmt is closed if connection has already been closed */ - if (hstmt && statement->apr_dbd && statement->apr_dbd->dbc) { - rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); + if (statement) { + SQLHANDLE hstmt = statement->stmt; + + if (hstmt && statement->apr_dbd && statement->apr_dbd->dbc) { + rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); } - statement->stmt = NULL; + statement->stmt = NULL; + } return APR_FROM_SQL_RESULT(rc); } |