summaryrefslogtreecommitdiff
path: root/ext/pgsql
diff options
context:
space:
mode:
authorYasuo Ohgaki <yohgaki@php.net>2013-06-26 16:17:57 +0900
committerYasuo Ohgaki <yohgaki@php.net>2013-06-26 16:17:57 +0900
commit6c8cef3ca49a11228d4dcd188170b943e03c3972 (patch)
tree34ea9f95531777eb2ecf8084af51fdab109f8f6a /ext/pgsql
parent12b75e3d3e67289c28cfc879716c476f0de04999 (diff)
downloadphp-git-6c8cef3ca49a11228d4dcd188170b943e03c3972.tar.gz
Fixed bug #65015 (pg_send_query does not flush send buffer) patch submitted by: adam at vektah dot net
Diffstat (limited to 'ext/pgsql')
-rw-r--r--ext/pgsql/pgsql.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index f90ba78780..1b302668af 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -4573,6 +4573,7 @@ PHP_FUNCTION(pg_send_query)
PGconn *pgsql;
PGresult *res;
int leftover = 0;
+ int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs",
&pgsql_link, &query, &len) == FAILURE) {
@@ -4600,6 +4601,14 @@ PHP_FUNCTION(pg_send_query)
RETURN_FALSE;
}
}
+ /* Wait to finish sending buffer */
+ while ((ret = PQflush(pgsql))) {
+ if (ret == -1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Could not empty PostgreSQL send buffer");
+ break;
+ }
+ usleep(10000);
+ }
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
}
@@ -4620,6 +4629,7 @@ PHP_FUNCTION(pg_send_query_params)
PGconn *pgsql;
PGresult *res;
int leftover = 0;
+ int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsa/", &pgsql_link, &query, &query_len, &pv_param_arr) == FAILURE) {
return;
@@ -4686,6 +4696,14 @@ PHP_FUNCTION(pg_send_query_params)
}
}
_php_pgsql_free_params(params, num_params);
+ /* Wait to finish sending buffer */
+ while ((ret = PQflush(pgsql))) {
+ if (ret == -1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Could not empty PostgreSQL send buffer");
+ break;
+ }
+ usleep(10000);
+ }
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
}
@@ -4705,6 +4723,7 @@ PHP_FUNCTION(pg_send_prepare)
PGconn *pgsql;
PGresult *res;
int leftover = 0;
+ int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rss", &pgsql_link, &stmtname, &stmtname_len, &query, &query_len) == FAILURE) {
return;
@@ -4735,6 +4754,14 @@ PHP_FUNCTION(pg_send_prepare)
RETURN_FALSE;
}
}
+ /* Wait to finish sending buffer */
+ while ((ret = PQflush(pgsql))) {
+ if (ret == -1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Could not empty postgres send buffer");
+ break;
+ }
+ usleep(10000);
+ }
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
}
@@ -4757,6 +4784,7 @@ PHP_FUNCTION(pg_send_execute)
PGconn *pgsql;
PGresult *res;
int leftover = 0;
+ int ret;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsa", &pgsql_link, &stmtname, &stmtname_len, &pv_param_arr) == FAILURE) {
return;
@@ -4823,6 +4851,14 @@ PHP_FUNCTION(pg_send_execute)
}
}
_php_pgsql_free_params(params, num_params);
+ /* Wait to finish sending buffer */
+ while ((ret = PQflush(pgsql))) {
+ if (ret == -1) {
+ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Could not empty postgres send buffer");
+ break;
+ }
+ usleep(10000);
+ }
if (PQ_SETNONBLOCKING(pgsql, 0)) {
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Cannot set connection to blocking mode");
}