Commit:    6c8cef3ca49a11228d4dcd188170b943e03c3972
Author:    Yasuo Ohgaki <yohg...@php.net>         Wed, 26 Jun 2013 16:17:57 
+0900
Parents:   12b75e3d3e67289c28cfc879716c476f0de04999
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=6c8cef3ca49a11228d4dcd188170b943e03c3972

Log:
Fixed bug #65015 (pg_send_query does not flush send buffer) patch submitted by: 
adam at vektah dot net

Bugs:
https://bugs.php.net/65015

Changed paths:
  M  ext/pgsql/pgsql.c


Diff:
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index f90ba78..1b30266 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");
        }


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to