summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortdonovan <tdonovan@13f79535-47bb-0310-9956-ffa450edef68>2008-06-17 18:34:57 +0000
committertdonovan <tdonovan@13f79535-47bb-0310-9956-ffa450edef68>2008-06-17 18:34:57 +0000
commitcc8b2edbd3a854ee7910a2b916c774b0965e2ead (patch)
tree5a7f86f6bf359534795f9c1ec8e87fcc90e827d6
parent586da2a1dec7bdc2fb2586bb6780facefe688a20 (diff)
downloadlibapr-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.c18
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);
}