summaryrefslogtreecommitdiff
path: root/ext/mysqlnd/mysqlnd.c
diff options
context:
space:
mode:
authorAndrey Hristov <andrey@php.net>2010-05-03 17:07:18 +0000
committerAndrey Hristov <andrey@php.net>2010-05-03 17:07:18 +0000
commit6dff9e55be3446333f9c25a3acc29ca8017971ad (patch)
tree5e97fc1def97f75e15e56addb393c62e1a4e05dc /ext/mysqlnd/mysqlnd.c
parent44bcdeeb772d17e8d81224a6d78c5fbf1718419e (diff)
downloadphp-git-6dff9e55be3446333f9c25a3acc29ca8017971ad.tar.gz
Handle gracefully OOM in mysqlnd_mempool_create and up the stack
Diffstat (limited to 'ext/mysqlnd/mysqlnd.c')
-rw-r--r--ext/mysqlnd/mysqlnd.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c
index 414d6f2b5a..f67c468c83 100644
--- a/ext/mysqlnd/mysqlnd.c
+++ b/ext/mysqlnd/mysqlnd.c
@@ -2060,7 +2060,7 @@ oom:
static MYSQLND_RES *
MYSQLND_METHOD(mysqlnd_conn, use_result)(MYSQLND * const conn TSRMLS_DC)
{
- MYSQLND_RES *result;
+ MYSQLND_RES * result;
DBG_ENTER("mysqlnd_conn::use_result");
DBG_INF_FMT("conn=%llu", conn->thread_id);
@@ -2079,11 +2079,14 @@ MYSQLND_METHOD(mysqlnd_conn, use_result)(MYSQLND * const conn TSRMLS_DC)
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_UNBUFFERED_SETS);
- result = conn->current_result;
- conn->current_result = NULL;
- result->conn = conn->m->get_reference(conn TSRMLS_CC);
+ conn->current_result->conn = conn->m->get_reference(conn TSRMLS_CC);
+ result = conn->current_result->m.use_result(conn->current_result, FALSE TSRMLS_CC);
- result = result->m.use_result(result, FALSE TSRMLS_CC);
+ if (!result) {
+ conn->current_result->m.free_result(conn->current_result, TRUE TSRMLS_CC);
+ }
+ conn->current_result = NULL;
+
DBG_RETURN(result);
}
/* }}} */
@@ -2112,10 +2115,11 @@ MYSQLND_METHOD(mysqlnd_conn, store_result)(MYSQLND * const conn TSRMLS_DC)
MYSQLND_INC_CONN_STATISTIC(conn->stats, STAT_BUFFERED_SETS);
- result = conn->current_result;
+ result = conn->current_result->m.store_result(conn->current_result, conn, FALSE TSRMLS_CC);
+ if (!result) {
+ conn->current_result->m.free_result(conn->current_result, TRUE TSRMLS_CC);
+ }
conn->current_result = NULL;
-
- result = result->m.store_result(result, conn, FALSE TSRMLS_CC);
DBG_RETURN(result);
}
/* }}} */