List:Commits« Previous MessageNext Message »
From:ahristov Date:August 15 2007 6:55pm
Subject:PHP mysqlnd svn commit: r916 - trunk/php5/ext/mysqli
View as plain text  
Author: ahristov
Date: 2007-08-15 18:55:24 +0200 (Wed, 15 Aug 2007)
New Revision: 916

Modified:
   trunk/php5/ext/mysqli/mysqli_nonapi.c
Log:
Backport recent changes to PHP5


Modified: trunk/php5/ext/mysqli/mysqli_nonapi.c
===================================================================
--- trunk/php5/ext/mysqli/mysqli_nonapi.c	2007-08-15 16:43:29 UTC (rev 915)
+++ trunk/php5/ext/mysqli/mysqli_nonapi.c	2007-08-15 16:55:24 UTC (rev 916)
@@ -76,6 +76,9 @@
 	mysql = (MY_MYSQL *) ecalloc(1, sizeof(MY_MYSQL));
 
 	if (strlen(SAFE_STR(hostname)) > 2 && !strncasecmp(hostname, "p:", 2)) {
+		if (!MyG(allow_persistent)) {
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Persistent connections are disabled.
Downgrading to normal");			
+		}
 		mysql->persistent = persistent = TRUE;
 		hostname += 2;
 
@@ -108,21 +111,27 @@
 #endif
 					goto end; 
 				}
+				MyG(num_links)--;
 				zend_hash_del(&EG(persistent_list), hash_key, hash_len + 1);
 			}	
 		}
 	}
 
+	if (MyG(max_links) != -1 && MyG(num_links) >= MyG(max_links)) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open links (%ld)",
MyG(num_links));
+		goto err;
+	}
+	if (persistent && MyG(max_persistent) != -1 && MyG(num_persistent) >=
MyG(max_persistent)) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Too many open persistent links (%ld)",
MyG(num_persistent));
+		goto err;
+	}
+
 #if !defined(HAVE_MYSQLND)
 	if (!(mysql->mysql = mysql_init(NULL))) {
 #else
 	if (!(mysql->mysql = mysqlnd_init(persistent))) {
 #endif
-		efree(mysql);
-		if (persistent) {
-			efree(hash_key);
-		}
-		RETURN_FALSE;
+		goto err;
 	}
 	new_connection = TRUE;
 
@@ -149,11 +158,7 @@
 
 		/* free mysql structure */
 		mysqli_close(mysql->mysql, MYSQLI_CLOSE_DISCONNECTED);
-		efree(mysql);
-		if (persistent) {
-			efree(hash_key);
-		}
-		RETURN_FALSE;
+		goto err;
 	}
 
 	/* clear error */
@@ -186,8 +191,10 @@
 		} 
 	}
 	if (persistent) {
+		MyG(num_persistent)++;
 		efree(hash_key);
 	}
+	MyG(num_links)++;
 
 #if !defined(HAVE_MYSQLND)
 	mysql->multi_query = 0;
@@ -200,7 +207,14 @@
 	} else {
 		((mysqli_object *) zend_object_store_get_object(object TSRMLS_CC))->ptr =
mysqli_resource;
 	}
+	return;
 
+err:
+	efree(mysql);
+	if (persistent) {
+		efree(hash_key);
+	}
+	RETURN_FALSE;
 }
 /* }}} */
 

Thread
PHP mysqlnd svn commit: r916 - trunk/php5/ext/mysqliahristov15 Aug