diff options
| -rw-r--r-- | ext/mysqlnd/mysqlnd.h | 2 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_palloc.c | 26 | ||||
| -rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 3 | ||||
| -rw-r--r-- | ext/mysqlnd/php_mysqlnd.c | 4 | 
4 files changed, 24 insertions, 11 deletions
diff --git a/ext/mysqlnd/mysqlnd.h b/ext/mysqlnd/mysqlnd.h index 99fedc9ef8..414ff5052f 100644 --- a/ext/mysqlnd/mysqlnd.h +++ b/ext/mysqlnd/mysqlnd.h @@ -318,11 +318,9 @@ PHPAPI MYSQLND_THD_ZVAL_PCACHE * _mysqlnd_palloc_rinit(MYSQLND_ZVAL_PCACHE * cac  PHPAPI void						 _mysqlnd_palloc_rshutdown(MYSQLND_THD_ZVAL_PCACHE * cache TSRMLS_DC); -#define mysqlnd_palloc_init_thd_cache(cache) 			_mysqlnd_palloc_init_thd_cache((cache) TSRMLS_CC)  #define mysqlnd_palloc_free_thd_cache_reference(cache)	_mysqlnd_palloc_free_thd_cache_reference((cache) TSRMLS_CC)  #define mysqlnd_palloc_get_thd_cache_reference(cache)	_mysqlnd_palloc_get_thd_cache_reference((cache) TSRMLS_CC) -PHPAPI MYSQLND_THD_ZVAL_PCACHE*	_mysqlnd_palloc_init_thd_cache(MYSQLND_ZVAL_PCACHE * const cache TSRMLS_DC);  MYSQLND_THD_ZVAL_PCACHE*		_mysqlnd_palloc_get_thd_cache_reference(MYSQLND_THD_ZVAL_PCACHE * const cache TSRMLS_DC);  PHPAPI void						_mysqlnd_palloc_free_thd_cache_reference(MYSQLND_THD_ZVAL_PCACHE **cache TSRMLS_DC); diff --git a/ext/mysqlnd/mysqlnd_palloc.c b/ext/mysqlnd/mysqlnd_palloc.c index 1b035ed365..eeaedd18f8 100644 --- a/ext/mysqlnd/mysqlnd_palloc.c +++ b/ext/mysqlnd/mysqlnd_palloc.c @@ -82,6 +82,7 @@ PHPAPI MYSQLND_ZVAL_PCACHE* _mysqlnd_palloc_init_cache(unsigned int cache_size T  /* {{{ mysqlnd_palloc_get_cache_reference */ +static inline  MYSQLND_ZVAL_PCACHE* mysqlnd_palloc_get_cache_reference(MYSQLND_ZVAL_PCACHE * const cache)  {  	if (cache) { @@ -94,6 +95,20 @@ MYSQLND_ZVAL_PCACHE* mysqlnd_palloc_get_cache_reference(MYSQLND_ZVAL_PCACHE * co  /* }}} */ +/* {{{ mysqlnd_palloc_release_cache_reference */ +static inline +MYSQLND_ZVAL_PCACHE* mysqlnd_palloc_release_cache_reference(MYSQLND_ZVAL_PCACHE * const cache) +{ +	if (cache) { +		LOCK_PCACHE(cache); +		cache->references--; +		UNLOCK_PCACHE(cache); +	} +	return cache; +} +/* }}} */ + +  /* {{{ mysqlnd_palloc_free_cache */  /*    As this call will happen on MSHUTDOWN(), then we don't need to copy the zvals with @@ -122,7 +137,7 @@ void _mysqlnd_palloc_free_cache(MYSQLND_ZVAL_PCACHE *cache TSRMLS_DC)  /* {{{ _mysqlnd_palloc_init_thd_cache */ -PHPAPI MYSQLND_THD_ZVAL_PCACHE* _mysqlnd_palloc_init_thd_cache(MYSQLND_ZVAL_PCACHE * const cache TSRMLS_DC) +MYSQLND_THD_ZVAL_PCACHE* mysqlnd_palloc_init_thd_cache(MYSQLND_ZVAL_PCACHE * const cache TSRMLS_DC)  {  	MYSQLND_THD_ZVAL_PCACHE *ret = calloc(1, sizeof(MYSQLND_THD_ZVAL_PCACHE));  	DBG_ENTER("_mysqlnd_palloc_init_thd_cache"); @@ -163,17 +178,18 @@ MYSQLND_THD_ZVAL_PCACHE* _mysqlnd_palloc_get_thd_cache_reference(MYSQLND_THD_ZVA  {  	DBG_ENTER("_mysqlnd_palloc_get_thd_cache_reference");  	if (cache) { -		++cache->references;  		DBG_INF_FMT("cache=%p new_refc=%d gc_list.canary1=%p gc_list.canary2=%p",  					cache, cache->references, cache->gc_list.canary1, cache->gc_list.canary2);  		mysqlnd_palloc_get_cache_reference(cache->parent); +		/* No concurrency here, we are in the same thread */ +		++cache->references;  	}  	DBG_RETURN(cache);  }  /* }}} */ -/* {{{ mysqlnd_palloc_free_cache */ +/* {{{ mysqlnd_palloc_free_thd_cache */  /*    As this call will happen on MSHUTDOWN(), then we don't need to copy the zvals with    copy_ctor but scrap what they point to with zval_dtor() and then just free our @@ -230,7 +246,7 @@ PHPAPI void _mysqlnd_palloc_free_thd_cache_reference(MYSQLND_THD_ZVAL_PCACHE **c  {  	DBG_ENTER("_mysqlnd_palloc_free_thd_cache_reference");  	if (*cache) { -		--(*cache)->parent->references; +		mysqlnd_palloc_release_cache_reference((*cache)->parent);  		DBG_INF_FMT("cache=%p references_left=%d canary1=%p canary2=%p",  					*cache, (*cache)->references, (*cache)->gc_list.canary1, (*cache)->gc_list.canary2); @@ -528,7 +544,7 @@ void mysqlnd_palloc_zval_ptr_dtor(zval **zv, MYSQLND_THD_ZVAL_PCACHE * const thd  /* {{{ _mysqlnd_palloc_rinit */  PHPAPI MYSQLND_THD_ZVAL_PCACHE * _mysqlnd_palloc_rinit(MYSQLND_ZVAL_PCACHE * cache TSRMLS_DC)  { -	return mysqlnd_palloc_init_thd_cache(cache); +	return mysqlnd_palloc_init_thd_cache(cache TSRMLS_CC);  }  /* }}} */ diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 2924827e9c..c9cc38241e 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -42,7 +42,6 @@  #define MYSQLND_DUMP_HEADER_N_BODY2  #define MYSQLND_DUMP_HEADER_N_BODY_FULL2 -  #define	PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_size, packet_type_as_text, packet_type) \  	{ \  		if (FAIL == mysqlnd_read_header((conn), &((packet)->header) TSRMLS_CC)) {\ @@ -1364,7 +1363,7 @@ void php_mysqlnd_rowp_read_binary_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffe  	zval **current_field, **end_field, **start_field;  	zend_bool as_unicode = conn->options.numeric_and_datetime_as_unicode;  	zend_bool allocated; -	void *obj; +	void *obj = NULL;  	DBG_ENTER("php_mysqlnd_rowp_read_binary_protocol"); diff --git a/ext/mysqlnd/php_mysqlnd.c b/ext/mysqlnd/php_mysqlnd.c index 7ebb748024..196b96e884 100644 --- a/ext/mysqlnd/php_mysqlnd.c +++ b/ext/mysqlnd/php_mysqlnd.c @@ -46,13 +46,13 @@ PHPAPI void mysqlnd_minfo_print_hash(zval *values)  	zend_hash_internal_pointer_reset_ex(Z_ARRVAL_P(values), &pos_values);  	while (zend_hash_get_current_data_ex(Z_ARRVAL_P(values), -										(void **)&values_entry, &pos_values) == SUCCESS) { -		TSRMLS_FETCH(); +		(void **)&values_entry, &pos_values) == SUCCESS) {  		zstr	string_key;  		uint	string_key_len;  		ulong	num_key;  		int     s_len;  		char 	*s = NULL; +		TSRMLS_FETCH();  		zend_hash_get_current_key_ex(Z_ARRVAL_P(values), &string_key, &string_key_len, &num_key, 0, &pos_values);  | 
