Pantek Library
Hosting Provided By
CybrHost
High Speed Hosting

PHP mysqlnd svn commit: r901 - trunk/mysqlnd

From: <ahristov(at)mysql.com>
Date: Tue Aug 14 2007 - 15:47:25 EDT


Author: ahristov
Date: 2007-08-14 21:47:24 +0200 (Tue, 14 Aug 2007) New Revision: 901

Modified:

   trunk/mysqlnd/mysqlnd.c
   trunk/mysqlnd/mysqlnd_wireprotocol.c
Log:
Less e_warnings...

Modified: trunk/mysqlnd/mysqlnd.c


  • trunk/mysqlnd/mysqlnd.c 2007-08-14 19:46:27 UTC (rev 900)
    +++ trunk/mysqlnd/mysqlnd.c 2007-08-14 19:47:24 UTC (rev 901)
    @@ -66,6 +66,9 @@ MYSQLND_STATS *mysqlnd_global_stats = NULL; static zend_bool mysqlnd_library_initted = FALSE;

+
+enum_func_status mysqlnd_send_close(MYSQLND * conn TSRMLS_DC);
+

 /* {{{ mysqlnd_library_init */
 static
 void mysqlnd_library_init(zend_bool collect_statistics) @@ -119,10 +122,13 @@

         }  

 	if (conn->net.stream) {

+ DBG_INF_FMT("Freeing stream. abstract=%p", conn->net.stream->abstract);
php_stream_free(conn->net.stream, (pers) ? PHP_STREAM_FREE_RSRC_DTOR : PHP_STREAM_FREE_CLOSE); conn->net.stream = NULL; }
+
+ DBG_INF("Freeing memory of members");
if (conn->host) { pefree(conn->host, pers); conn->host = NULL; @@ -200,14 +206,17 @@ conn->options.ssl_cipher = NULL; } if (conn->zval_cache) {
+ DBG_INF("Freeing zval cache reference");
mysqlnd_palloc_free_thd_cache_reference(&conn->zval_cache); conn->zval_cache = NULL; } if (conn->qcache) {
+ DBG_INF("Freeing qcache reference");
mysqlnd_qcache_free_cache_reference(&conn->qcache); conn->qcache = NULL; } if (conn->net.cmd_buffer.buffer) {
+ DBG_INF("Freeing cmd buffer");
pefree(conn->net.cmd_buffer.buffer, pers); conn->net.cmd_buffer.buffer = NULL; }

@@ -443,7 +452,7 @@
 {
 	char *transport = NULL, *errstr = NULL;
 	char *hashed_details = NULL;
-	int transport_len, errcode = 0;

+ int transport_len, hashed_details_len, errcode = 0;
unsigned int streams_options = ENFORCE_SAFE_MODE; unsigned int streams_flags = STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT; zend_bool self_alloced = FALSE; @@ -456,14 +465,17 @@ php_mysql_packet_ok ok_packet; DBG_ENTER("mysqlnd_connect"); - DBG_INF_FMT("host=%s user=%s db=%s port=%d flags=%d persistent=%d", - host?host:"", user?user:"", db?db:"", port, mysql_flags, conn? conn->persistent:0);
+ DBG_INF_FMT("host=%s user=%s db=%s port=%d flags=%d persistent=%d state=%d",
+ host?host:"", user?user:"", db?db:"", port, mysql_flags,
+ conn? conn->persistent:0, conn? conn->state:-1);
- if (conn && conn->state != CONN_ALLOCED) { - SET_CLIENT_ERROR(conn->error_info, CR_COMMANDS_OUT_OF_SYNC, UNKNOWN_SQLSTATE, - mysqlnd_out_of_sync); - DBG_INF("Command out of sync"); - DBG_RETURN(NULL);
+ if (conn && conn->state > CONN_ALLOCED) {
+ MYSQLND_INC_CONN_STATISTIC(NULL, STAT_CLOSE_IMPLICIT);
+
+ mysqlnd_send_close(conn TSRMLS_CC);
+
+ conn->m->free_contents(conn TSRMLS_CC);
+ /* Now reconnect using the same handle */
} if (!host || !host[0]) { @@ -500,9 +512,9 @@ struct timeval tv; gettimeofday(&tv, NULL); /* We should generate something unique */ - spprintf(&hashed_details, 0, "%s@%s@%s@%ld@%ld@%0.8F", - transport, user, db, tv.tv_sec, (long int)tv.tv_usec, - php_combined_lcg(TSRMLS_C) * 10);
+ hashed_details_len = spprintf(&hashed_details, 0, "%s@%s@%s@%ld@%ld@%0.8F",
+ transport, user, db, tv.tv_sec, (long int)tv.tv_usec,
+ php_combined_lcg(TSRMLS_C) * 10);
DBG_INF_FMT("hashed_details=%s", hashed_details); } @@ -533,9 +545,30 @@ hashed_details,
Do you need help?X
(conn->options.timeout_connect) ? &tv : NULL, NULL /*ctx*/, &errstr, &errcode);
+ DBG_INF_FMT("stream=%p", conn->net.stream);
+
if (hashed_details) {
+ /*
+ If persistent, the streams register it in EG(persistent_list).
+ This is unwanted. ext/mysql or ext/mysqli are responsible to clean,
+ whatever they have to.
+ */
+ zend_rsrc_list_entry *le;
+
+ if (zend_hash_find(&EG(persistent_list), hashed_details, hashed_details_len + 1,
+ (void*) &le) == SUCCESS) {
+ /*
+ in_free will let streams code skip destructing - big HACK,
+ but STREAMS suck big time regarding persistent streams.
+ Just not compatible for extensions that need persistency.
+ */
+ conn->net.stream->in_free = 1;
+ zend_hash_del(&EG(persistent_list), hashed_details, hashed_details_len + 1);
+ conn->net.stream->in_free = 0;
+ }
efree(hashed_details); }
+
if (errstr || !conn->net.stream) { goto err; } @@ -618,8 +651,8 @@ } DBG_ERR_FMT("ERROR:%d [SQLSTATE:%s] %s", ok_packet.error_no, ok_packet.sqlstate, ok_packet.error); - php_error_docref(NULL TSRMLS_CC, E_WARNING, "ERROR:%d [SQLSTATE:%s] %s PID=%d", - ok_packet.error_no, ok_packet.sqlstate, ok_packet.error, getpid());
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "ERROR:%d [SQLSTATE:%s] %s",
+ ok_packet.error_no, ok_packet.sqlstate, ok_packet.error);
} if (!self_alloced) { conn->error_info.error_no = ok_packet.error_no; @@ -670,7 +703,7 @@ conn->net.cmd_buffer.buffer = pemalloc(conn->net.cmd_buffer.length, conn->persistent); MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CONNECT_SUCCESS); - DBG_INF_FMT("connection_id=%llu conn->net.stream->abstract=%p", conn->thread_id, conn->net.stream->abstract);
+ DBG_INF_FMT("connection_id=%llu", conn->thread_id);
{ uint as_unicode = 1; conn->m->set_client_option(conn, MYSQLND_OPT_NUMERIC_AND_DATETIME_AS_UNICODE, @@ -876,7 +909,7 @@ DBG_ENTER("mysqlnd_conn::ping"); DBG_INF_FMT("conn=%llu", conn->thread_id); - ret = mysqlnd_simple_command(conn, COM_PING, NULL, 0, PROT_OK_PACKET, FALSE TSRMLS_CC);
+ ret = mysqlnd_simple_command(conn, COM_PING, NULL, 0, PROT_OK_PACKET, TRUE TSRMLS_CC);
/* The server sends 0 but libmysql doesn't read it and has established a protocol of giving back -1. Thus we have to follow it :(
@@ -1013,7 +1046,7 @@    

 /* {{{ mysqlnd_send_close */
-static enum_func_status
+enum_func_status

 mysqlnd_send_close(MYSQLND * conn TSRMLS_DC)  {

         enum_func_status ret = PASS;
@@ -1025,7 +1058,7 @@

 		case CONN_READY:
 			DBG_INF("Connection clean, sending COM_QUIT");
 			ret =  mysqlnd_simple_command(conn, COM_QUIT, NULL, 0, PROT_LAST,
-										  conn->tmp_int? TRUE : FALSE TSRMLS_CC);

+ TRUE TSRMLS_CC);
/* Do nothing */ break; case CONN_SENDING_LOAD_DATA:
Do you need more help?X

Modified: trunk/mysqlnd/mysqlnd_wireprotocol.c


  • trunk/mysqlnd/mysqlnd_wireprotocol.c 2007-08-14 19:46:27 UTC (rev 900)
    +++ trunk/mysqlnd/mysqlnd_wireprotocol.c 2007-08-14 19:47:24 UTC (rev 901)
    @@ -46,23 +46,17 @@ conn->state = CONN_QUIT_SENT; \ SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\ DBG_ERR_FMT("Can't read %s's header", (packet_type)); \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can't read %s's header. PID=%d", \ - (packet_type), getpid());\ return FAIL;\ }\ if ((buf_size) < (packet)->header.size) { \ DBG_ERR_FMT("Packet buffer wasn't big enough %u bytes will be unread", \ (packet)->header.size - (buf_size)); \ - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Packet buffer wasn't big enough" \ - "%u bytes will be unread. PID=%d", \ - (packet)->header.size - (buf_size), getpid());\ }\ if (!mysqlnd_read_body((conn), (buf), \ MIN((buf_size), (packet)->header.size) TSRMLS_CC)) { \ conn->state = CONN_QUIT_SENT; \ SET_CLIENT_ERROR(conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\ DBG_ERR_FMT("Empty %s packet body", (packet_type)); \ - php_error(E_WARNING, "Empty %s packet body. PID=%d", (packet_type), getpid());\ return FAIL; \ } \ } @@ -431,7 +425,6 @@ do { if (!(ret= php_stream_read(net->stream, p, to_read))) { DBG_ERR_FMT("Error while reading header from socket"); - php_error(E_WARNING, "Error while reading header from socket. PID=%d", getpid()); return FAIL; } p += ret; @@ -883,6 +876,8 @@ /* Let's have some space, which we can use, if not enough, we will allocate new buffer */ php_mysql_packet_command *packet= (php_mysql_packet_command *) _packet; MYSQLND_NET *net = &conn->net;
    + unsigned int error_reporting = EG(error_reporting);
    + size_t written;
 	DBG_ENTER("php_mysqlnd_cmd_write");
 	/*
@@ -891,6 +886,10 @@
 	*/
 	net->packet_no = 0;
 

+ if (error_reporting) {
+ zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+ }
+

 #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND

         php_mysqlnd_consume_uneaten_data(conn, packet->command TSRMLS_CC);  #endif
@@ -899,11 +898,11 @@

                 char buffer[MYSQLND_HEADER_SIZE + 1];  

 		int1store(buffer + MYSQLND_HEADER_SIZE, packet->command);
-		DBG_RETURN(mysqlnd_stream_write_w_header(conn, buffer, 1 TSRMLS_CC));
Can we help you?X

+ written = mysqlnd_stream_write_w_header(conn, buffer, 1 TSRMLS_CC);
} else { #if USE_CORK && defined(TCP_CORK) - DBG_RETURN(mysqlnd_stream_write_w_command(conn, packet->command, packet->argument, - packet->arg_len TSRMLS_CC));
+ written = mysqlnd_stream_write_w_command(conn, packet->command, packet->argument,
+ packet->arg_len TSRMLS_CC));
#else size_t tmp_len = packet->arg_len + 1 + MYSQLND_HEADER_SIZE, ret; zend_uchar *tmp, *p; @@ -920,9 +919,21 @@ MYSQLND_INC_CONN_STATISTIC(&conn->stats, STAT_CMD_BUFFER_TOO_SMALL); efree(tmp); } - DBG_RETURN(ret);
+ written = ret;
#endif }
+ if (error_reporting) {
+ /* restore error reporting */
+ zval tmp;
+ INIT_ZVAL(tmp);
+ Z_TYPE(tmp) = IS_LONG;
+ Z_LVAL(tmp) = error_reporting;
+ convert_to_string(&tmp);
+ zend_alter_ini_entry("error_reporting", sizeof("error_reporting"),
+ Z_STRVAL(tmp), Z_STRLEN(tmp), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
+ zval_dtor(&tmp);
+ }
+ DBG_RETURN(written);

 }
 /* }}} */  
-- 
MySQL Code Commits Mailing List
For list archives: 
http://lists.mysql.com/commits
To unsubscribe:    
http://lists.mysql.com/commits?unsub=lists@pantek.com
Received on Tue Aug 14 15:47:31 2007

This archive was generated by hypermail 2.1.8 : Sun Oct 07 2007 - 08:33:24 EDT


Contact Us  Legal Notices  Order Services Online 
Pantek Home  Privacy Policy  IT news  Site Map  Pantek Library