andrey Thu Feb 14 12:51:00 2008 UTC Modified files: /php-src/ext/mysqlnd mysqlnd.c mysqlnd.h mysqlnd_block_alloc.c mysqlnd_block_alloc.h mysqlnd_debug.c mysqlnd_debug.h mysqlnd_enum_n_def.h mysqlnd_palloc.c mysqlnd_palloc.h mysqlnd_priv.h mysqlnd_ps.c mysqlnd_ps_codec.c mysqlnd_qcache.c mysqlnd_result.c mysqlnd_result.h mysqlnd_result_meta.c mysqlnd_result_meta.h mysqlnd_statistics.c mysqlnd_statistics.h mysqlnd_structs.h mysqlnd_wireprotocol.c mysqlnd_wireprotocol.h php_mysqlnd.c php_mysqlnd.h Log: Update mysqlnd - fix bg_store
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd.c?r1=1.18&r2=1.19&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd.c diff -u php-src/ext/mysqlnd/mysqlnd.c:1.18 php-src/ext/mysqlnd/mysqlnd.c:1.19 --- php-src/ext/mysqlnd/mysqlnd.c:1.18 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd.c,v 1.18 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd.c,v 1.19 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" @@ -546,7 +546,7 @@ PACKET_INIT_ALLOCA(greet_packet, PROT_GREET_PACKET); - PACKET_INIT(auth_packet, PROT_AUTH_PACKET, php_mysql_packet_auth *); + PACKET_INIT(auth_packet, PROT_AUTH_PACKET, php_mysql_packet_auth *, FALSE); PACKET_INIT_ALLOCA(ok_packet, PROT_OK_PACKET); if (!conn) { @@ -851,7 +851,7 @@ FALSE TSRMLS_CC)) { DBG_RETURN(FAIL); } - + CONN_SET_STATE(conn, CONN_QUERY_SENT); /* Here read the result set. We don't do it in simple_command because it need information from the ok packet. We will fetch it ourselves. @@ -1340,6 +1340,7 @@ #ifdef MYSQLND_THREADED tsrm_mutex_lock(conn->LOCK_state); #endif + DBG_INF_FMT("New state=%d", new_state); conn->state = new_state; #ifdef MYSQLND_THREADED tsrm_mutex_unlock(conn->LOCK_state); http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd.h?r1=1.11&r2=1.12&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd.h diff -u php-src/ext/mysqlnd/mysqlnd.h:1.11 php-src/ext/mysqlnd/mysqlnd.h:1.12 --- php-src/ext/mysqlnd/mysqlnd.h:1.11 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd.h Thu Feb 14 12:51:00 2008 @@ -18,12 +18,12 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd.h,v 1.11 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd.h,v 1.12 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_H #define MYSQLND_H -#define MYSQLND_VERSION "mysqlnd 5.0.3-dev - 080129 - $Revision: 1.11 $" +#define MYSQLND_VERSION "mysqlnd 5.0.3-dev - 080129 - $Revision: 1.12 $" #define MYSQLND_VERSION_ID 50002 /* This forces inlining of some accessor functions */ @@ -346,6 +346,9 @@ MYSQLND_DEBUG *dbg; /* The DBG object */ long net_cmd_buffer_size; long net_read_buffer_size; +#ifdef ZTS + THREAD_T thread_id; +#endif ZEND_END_MODULE_GLOBALS(mysqlnd) ZEND_EXTERN_MODULE_GLOBALS(mysqlnd); http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_block_alloc.c?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_block_alloc.c diff -u php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.4 php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.5 --- php-src/ext/mysqlnd/mysqlnd_block_alloc.c:1.4 Mon Feb 4 17:32:43 2008 +++ php-src/ext/mysqlnd/mysqlnd_block_alloc.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_block_alloc.c,v 1.4 2008/02/04 17:32:43 andrey Exp $ */ +/* $Id: mysqlnd_block_alloc.c,v 1.5 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_block_alloc.h?r1=1.2&r2=1.3&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_block_alloc.h diff -u php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.2 php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.3 --- php-src/ext/mysqlnd/mysqlnd_block_alloc.h:1.2 Mon Jan 28 22:54:21 2008 +++ php-src/ext/mysqlnd/mysqlnd_block_alloc.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_block_alloc.h,v 1.2 2008/01/28 22:54:21 andrey Exp $ */ +/* $Id: mysqlnd_block_alloc.h,v 1.3 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_BLOCK_ALLOC_H #define MYSQLND_BLOCK_ALLOC_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_debug.c?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_debug.c diff -u php-src/ext/mysqlnd/mysqlnd_debug.c:1.4 php-src/ext/mysqlnd/mysqlnd_debug.c:1.5 --- php-src/ext/mysqlnd/mysqlnd_debug.c:1.4 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd_debug.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_debug.c,v 1.4 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd_debug.c,v 1.5 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" @@ -95,6 +95,12 @@ line_buffer[6], level_buffer[7]; MYSQLND_ZTS(self); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + return PASS; /* don't trace background threads */ + } +#endif + if (!self->stream) { if (FAIL == self->m->open(self, FALSE)) { return FAIL; @@ -195,6 +201,12 @@ line_buffer[6], level_buffer[7]; MYSQLND_ZTS(self); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + return PASS; /* don't trace background threads */ + } +#endif + if (!self->stream) { if (FAIL == self->m->open(self, FALSE)) { return FAIL; @@ -291,9 +303,15 @@ unsigned int line, const char * const file, char * func_name, uint func_name_len) { + MYSQLND_ZTS(self); if ((self->flags & MYSQLND_DEBUG_DUMP_TRACE) == 0 || self->file_name == NULL) { return FALSE; } +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + return FALSE; /* don't trace background threads */ + } +#endif if (zend_stack_count(&self->call_stack) >= self->nest_level_limit) { return FALSE; } @@ -303,7 +321,6 @@ func_name == mysqlnd_ecalloc_name || func_name == mysqlnd_pecalloc_name || func_name == mysqlnd_erealloc_name || func_name == mysqlnd_perealloc_name || func_name == mysqlnd_efree_name || func_name == mysqlnd_pefree_name || - func_name == mysqlnd_efree_name || func_name == mysqlnd_pefree_name || func_name == mysqlnd_malloc_name || func_name == mysqlnd_calloc_name || func_name == mysqlnd_realloc_name || func_name == mysqlnd_free_name || func_name == mysqlnd_palloc_zval_ptr_dtor_name || func_name == mysqlnd_palloc_get_zval_name || @@ -332,10 +349,16 @@ const char * const file) { char *func_name; + MYSQLND_ZTS(self); if ((self->flags & MYSQLND_DEBUG_DUMP_TRACE) == 0 || self->file_name == NULL) { return PASS; } +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + return PASS; /* don't trace background threads */ + } +#endif if (zend_stack_count(&self->call_stack) >= self->nest_level_limit) { return PASS; } @@ -644,6 +667,12 @@ { void *ret; DBG_ENTER(mysqlnd_emalloc_name); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + DBG_RETURN(_mysqlnd_pemalloc(size, 1 TSRMLS_CC ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)); + } +#endif + DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1, __zend_lineno); DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC)); ret = emalloc(size); @@ -691,6 +720,11 @@ { void *ret; DBG_ENTER(mysqlnd_ecalloc_name); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + DBG_RETURN(_mysqlnd_pecalloc(nmemb, size, 1 TSRMLS_CC ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)); + } +#endif DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1, __zend_lineno); DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC)); @@ -739,6 +773,11 @@ { void *ret; DBG_ENTER(mysqlnd_erealloc_name); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + DBG_RETURN(_mysqlnd_perealloc(ptr, new_size, 1 TSRMLS_CC ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)); + } +#endif DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1, __zend_lineno); DBG_INF_FMT("ptr=%p new_size=%lu", ptr, new_size); DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC)); @@ -788,6 +827,11 @@ void _mysqlnd_efree(void *ptr MYSQLND_MEM_D) { DBG_ENTER(mysqlnd_efree_name); +#ifdef ZTS + if (MYSQLND_G(thread_id) != tsrm_thread_id()) { + DBG_RETURN(_mysqlnd_pefree(ptr, 1 TSRMLS_CC ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)); + } +#endif DBG_INF_FMT("file=%-15s line=%4d", strrchr(__zend_filename, PHP_DIR_SEPARATOR) + 1, __zend_lineno); DBG_INF_FMT("ptr=%p", ptr); DBG_INF_FMT("before: %lu", zend_memory_usage(FALSE TSRMLS_CC)); http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_debug.h?r1=1.5&r2=1.6&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_debug.h diff -u php-src/ext/mysqlnd/mysqlnd_debug.h:1.5 php-src/ext/mysqlnd/mysqlnd_debug.h:1.6 --- php-src/ext/mysqlnd/mysqlnd_debug.h:1.5 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd_debug.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_debug.h,v 1.5 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd_debug.h,v 1.6 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_DEBUG_H #define MYSQLND_DEBUG_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_enum_n_def.h?r1=1.5&r2=1.6&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_enum_n_def.h diff -u php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.5 php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.6 --- php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.5 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd_enum_n_def.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_enum_n_def.h,v 1.5 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd_enum_n_def.h,v 1.6 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_ENUM_N_DEF_H #define MYSQLND_ENUM_N_DEF_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_palloc.c?r1=1.7&r2=1.8&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_palloc.c diff -u php-src/ext/mysqlnd/mysqlnd_palloc.c:1.7 php-src/ext/mysqlnd/mysqlnd_palloc.c:1.8 --- php-src/ext/mysqlnd/mysqlnd_palloc.c:1.7 Mon Jan 28 18:27:49 2008 +++ php-src/ext/mysqlnd/mysqlnd_palloc.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_palloc.c,v 1.7 2008/01/28 18:27:49 andrey Exp $ */ +/* $Id: mysqlnd_palloc.c,v 1.8 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_palloc.h?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_palloc.h diff -u php-src/ext/mysqlnd/mysqlnd_palloc.h:1.3 php-src/ext/mysqlnd/mysqlnd_palloc.h:1.4 --- php-src/ext/mysqlnd/mysqlnd_palloc.h:1.3 Mon Dec 31 07:12:12 2007 +++ php-src/ext/mysqlnd/mysqlnd_palloc.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_palloc.h,v 1.3 2007/12/31 07:12:12 sebastian Exp $ */ +/* $Id: mysqlnd_palloc.h,v 1.4 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_PALLOC_H #define MYSQLND_PALLOC_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_priv.h?r1=1.12&r2=1.13&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_priv.h diff -u php-src/ext/mysqlnd/mysqlnd_priv.h:1.12 php-src/ext/mysqlnd/mysqlnd_priv.h:1.13 --- php-src/ext/mysqlnd/mysqlnd_priv.h:1.12 Mon Feb 11 14:48:39 2008 +++ php-src/ext/mysqlnd/mysqlnd_priv.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_priv.h,v 1.12 2008/02/11 14:48:39 andrey Exp $ */ +/* $Id: mysqlnd_priv.h,v 1.13 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_PRIV_H #define MYSQLND_PRIV_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_ps.c?r1=1.11&r2=1.12&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_ps.c diff -u php-src/ext/mysqlnd/mysqlnd_ps.c:1.11 php-src/ext/mysqlnd/mysqlnd_ps.c:1.12 --- php-src/ext/mysqlnd/mysqlnd_ps.c:1.11 Tue Jan 29 22:06:16 2008 +++ php-src/ext/mysqlnd/mysqlnd_ps.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_ps.c,v 1.11 2008/01/29 22:06:16 rrichards Exp $ */ +/* $Id: mysqlnd_ps.c,v 1.12 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_ps_codec.c?r1=1.5&r2=1.6&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_ps_codec.c diff -u php-src/ext/mysqlnd/mysqlnd_ps_codec.c:1.5 php-src/ext/mysqlnd/mysqlnd_ps_codec.c:1.6 --- php-src/ext/mysqlnd/mysqlnd_ps_codec.c:1.5 Wed Jan 2 21:16:46 2008 +++ php-src/ext/mysqlnd/mysqlnd_ps_codec.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_ps_codec.c,v 1.5 2008/01/02 21:16:46 andrey Exp $ */ +/* $Id: mysqlnd_ps_codec.c,v 1.6 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_qcache.c?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_qcache.c diff -u php-src/ext/mysqlnd/mysqlnd_qcache.c:1.3 php-src/ext/mysqlnd/mysqlnd_qcache.c:1.4 --- php-src/ext/mysqlnd/mysqlnd_qcache.c:1.3 Mon Dec 31 07:12:12 2007 +++ php-src/ext/mysqlnd/mysqlnd_qcache.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_qcache.c,v 1.3 2007/12/31 07:12:12 sebastian Exp $ */ +/* $Id: mysqlnd_qcache.c,v 1.4 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result.c?r1=1.17&r2=1.18&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result.c diff -u php-src/ext/mysqlnd/mysqlnd_result.c:1.17 php-src/ext/mysqlnd/mysqlnd_result.c:1.18 --- php-src/ext/mysqlnd/mysqlnd_result.c:1.17 Wed Feb 6 14:11:32 2008 +++ php-src/ext/mysqlnd/mysqlnd_result.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result.c,v 1.17 2008/02/06 14:11:32 andrey Exp $ */ +/* $Id: mysqlnd_result.c,v 1.18 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_wireprotocol.h" @@ -40,32 +40,36 @@ MYSQLND_RES * result = NULL; void ***tsrm_ls = conn->tsrm_ls; #ifndef MYSQLND_SILENT - printf("conn=%p tsrm_ls=%p\n", conn, conn->tsrm_ls); + printf("THREAD] conn=%p tsrm_ls=%p\n", conn, conn->tsrm_ls); #endif do { pthread_mutex_lock(&conn->LOCK_work); - while (conn->thread_killed == FALSE /* && there is work */) { + while (conn->thread_killed == FALSE && !conn->current_result) { #ifndef MYSQLND_SILENT - printf("Waiting for work in %s\n", __FUNCTION__); + printf("THREAD] Waiting for work in %s\n", __FUNCTION__); #endif pthread_cond_wait(&conn->COND_work, &conn->LOCK_work); } if (conn->thread_killed == TRUE) { #ifndef MYSQLND_SILENT - printf("Thread killed in %s\n", __FUNCTION__); + printf("THREAD] Thread killed in %s\n", __FUNCTION__); #endif pthread_cond_signal(&conn->COND_thread_ended); pthread_mutex_unlock(&conn->LOCK_work); break; } #ifndef MYSQLND_SILENT - printf("Got work in %s\n", __FUNCTION__); + printf("THREAD] Got work in %s\n", __FUNCTION__); #endif CONN_SET_STATE(conn, CONN_FETCHING_DATA); result = conn->current_result; conn->current_result = NULL; + pthread_cond_signal(&conn->COND_work); /* sent notification back */ pthread_mutex_unlock(&conn->LOCK_work); +#ifndef MYSQLND_SILENT + printf("THREAD] Starting fetch %s\n", __FUNCTION__); +#endif mysqlnd_background_store_result_fetch_data(result TSRMLS_CC); /* do fetch the data from the wire */ @@ -74,13 +78,13 @@ CONN_SET_STATE(conn, CONN_READY); pthread_cond_signal(&conn->COND_work_done); #ifndef MYSQLND_SILENT - printf("Signaling work done in %s\n", __FUNCTION__); + printf("THREAD] Signaling work done in %s\n", __FUNCTION__); #endif pthread_mutex_unlock(&conn->LOCK_work); } while (1); #ifndef MYSQLND_SILENT - printf("Exiting worker thread in %s\n", __FUNCTION__); + printf("THREAD] Exiting worker thread in %s\n", __FUNCTION__); #endif return NULL; } @@ -461,6 +465,8 @@ */ conn->error_info = rset_header.error_info; ret = FAIL; + /* Return back from CONN_QUERY_SENT */ + CONN_SET_STATE(conn, CONN_READY); break; } conn->error_info.error_no = 0; @@ -976,7 +982,8 @@ by the resource destructor. mysqlnd_fetch_row_unbuffered() expects this to be not NULL. */ - PACKET_INIT(result->row_packet, PROT_ROW_PACKET, php_mysql_packet_row *); + /* FALSE = non-persistent */ + PACKET_INIT(result->row_packet, PROT_ROW_PACKET, php_mysql_packet_row *, FALSE); result->row_packet->field_count = result->field_count; result->row_packet->binary_protocol = ps; result->row_packet->fields_metadata = result->meta->fields; @@ -1182,7 +1189,8 @@ set->qcache = to_cache? mysqlnd_qcache_get_cache_reference(conn->qcache):NULL; set->references = 1; - PACKET_INIT(row_packet, PROT_ROW_PACKET, php_mysql_packet_row *); + /* non-persistent */ + PACKET_INIT(row_packet, PROT_ROW_PACKET, php_mysql_packet_row *, FALSE); row_packet->field_count = meta->field_count; row_packet->binary_protocol = binary_protocol; row_packet->fields_metadata = meta->fields; @@ -1315,6 +1323,7 @@ do { tsrm_mutex_lock(set->LOCK); if (set->bg_fetch_finished == TRUE) { + /* Don't unlock here, will be done later */ break; } if (!set->data_cursor || (set->data_cursor - set->data) < (set->row_count)) { @@ -1439,14 +1448,14 @@ free_rows = next_extend; - PACKET_INIT(row_packet, PROT_ROW_PACKET, php_mysql_packet_row *); + /* persistent */ + PACKET_INIT(row_packet, PROT_ROW_PACKET, php_mysql_packet_row *, TRUE); row_packet->field_count = result->meta->field_count; row_packet->binary_protocol = result->m.row_decoder == php_mysqlnd_rowp_read_binary_protocol; row_packet->fields_metadata = result->meta->fields; row_packet->bit_fields_count = result->meta->bit_fields_count; row_packet->bit_fields_total_len= result->meta->bit_fields_total_len; - -// row_packet->skip_extraction = TRUE; /* let php_mysqlnd_rowp_read() not allocate row_packet->fields, we will do it */ + row_packet->persistent_alloc = TRUE; while (FAIL != (ret = PACKET_READ(row_packet, conn)) && !row_packet->eof) { tsrm_mutex_lock(set->LOCK); @@ -1560,7 +1569,7 @@ return (result->m.store_result(result, conn, ps TSRMLS_CC)); #else enum_func_status ret; - zend_bool to_cache = FALSE; + zend_bool to_cache = TRUE; DBG_ENTER("mysqlnd_res::background_store_result"); DBG_INF_FMT("conn=%d ps_protocol=%d", conn->thread_id, ps); @@ -1585,11 +1594,26 @@ php_mysqlnd_rowp_read_text_protocol; CONN_SET_STATE(conn, CONN_FETCHING_DATA); - result->bg_stored_data->decode_in_foreground = FALSE; + /* + This should be definitely TRUE. Decoding in background means creating zvals + which is not very safe for Zend MM, will complain in debug mode and more problems + also manifest themselves - unstable. + */ + result->bg_stored_data->decode_in_foreground = TRUE; result->lengths = mnd_ecalloc(result->field_count, sizeof(unsigned long)); + pthread_mutex_lock(&conn->LOCK_work); + + pthread_cond_signal(&conn->COND_work); + do { + pthread_cond_wait(&conn->COND_work, &conn->LOCK_work); + } while (conn->current_result); /* this is our invariant */ + pthread_mutex_unlock(&conn->LOCK_work); + +#if 0 ret = mysqlnd_background_store_result_fetch_data(result TSRMLS_CC); +#endif DBG_RETURN(result); #endif http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result.h?r1=1.5&r2=1.6&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result.h diff -u php-src/ext/mysqlnd/mysqlnd_result.h:1.5 php-src/ext/mysqlnd/mysqlnd_result.h:1.6 --- php-src/ext/mysqlnd/mysqlnd_result.h:1.5 Tue Jan 29 18:13:12 2008 +++ php-src/ext/mysqlnd/mysqlnd_result.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result.h,v 1.5 2008/01/29 18:13:12 andrey Exp $ */ +/* $Id: mysqlnd_result.h,v 1.6 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_RESULT_H #define MYSQLND_RESULT_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result_meta.c?r1=1.6&r2=1.7&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result_meta.c diff -u php-src/ext/mysqlnd/mysqlnd_result_meta.c:1.6 php-src/ext/mysqlnd/mysqlnd_result_meta.c:1.7 --- php-src/ext/mysqlnd/mysqlnd_result_meta.c:1.6 Mon Jan 28 18:27:49 2008 +++ php-src/ext/mysqlnd/mysqlnd_result_meta.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result_meta.c,v 1.6 2008/01/28 18:27:49 andrey Exp $ */ +/* $Id: mysqlnd_result_meta.c,v 1.7 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_result_meta.h?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_result_meta.h diff -u php-src/ext/mysqlnd/mysqlnd_result_meta.h:1.3 php-src/ext/mysqlnd/mysqlnd_result_meta.h:1.4 --- php-src/ext/mysqlnd/mysqlnd_result_meta.h:1.3 Mon Dec 31 07:12:12 2007 +++ php-src/ext/mysqlnd/mysqlnd_result_meta.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_result_meta.h,v 1.3 2007/12/31 07:12:12 sebastian Exp $ */ +/* $Id: mysqlnd_result_meta.h,v 1.4 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_RESULT_META_H #define MYSQLND_RESULT_META_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_statistics.c?r1=1.4&r2=1.5&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_statistics.c diff -u php-src/ext/mysqlnd/mysqlnd_statistics.c:1.4 php-src/ext/mysqlnd/mysqlnd_statistics.c:1.5 --- php-src/ext/mysqlnd/mysqlnd_statistics.c:1.4 Tue Jan 29 12:00:52 2008 +++ php-src/ext/mysqlnd/mysqlnd_statistics.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_statistics.c,v 1.4 2008/01/29 12:00:52 andrey Exp $ */ +/* $Id: mysqlnd_statistics.c,v 1.5 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_statistics.h?r1=1.7&r2=1.8&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_statistics.h diff -u php-src/ext/mysqlnd/mysqlnd_statistics.h:1.7 php-src/ext/mysqlnd/mysqlnd_statistics.h:1.8 --- php-src/ext/mysqlnd/mysqlnd_statistics.h:1.7 Tue Jan 29 12:00:52 2008 +++ php-src/ext/mysqlnd/mysqlnd_statistics.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_statistics.h,v 1.7 2008/01/29 12:00:52 andrey Exp $ */ +/* $Id: mysqlnd_statistics.h,v 1.8 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_STATISTICS_H #define MYSQLND_STATISTICS_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_structs.h?r1=1.11&r2=1.12&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_structs.h diff -u php-src/ext/mysqlnd/mysqlnd_structs.h:1.11 php-src/ext/mysqlnd/mysqlnd_structs.h:1.12 --- php-src/ext/mysqlnd/mysqlnd_structs.h:1.11 Mon Feb 11 16:45:15 2008 +++ php-src/ext/mysqlnd/mysqlnd_structs.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_structs.h,v 1.11 2008/02/11 16:45:15 andrey Exp $ */ +/* $Id: mysqlnd_structs.h,v 1.12 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_STRUCTS_H #define MYSQLND_STRUCTS_H http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.c?r1=1.10&r2=1.11&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.c diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.10 php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.11 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.10 Mon Jan 28 22:54:21 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.c Thu Feb 14 12:51:00 2008 @@ -1685,7 +1685,7 @@ not free the array. As it is passed to us, we should not clean it ourselves. */ if (!alloca) { - mnd_efree(p); + mnd_pefree(p, p->header.persistent); } } /* }}} */ @@ -1723,7 +1723,7 @@ p->message = NULL; } if (!alloca) { - mnd_efree(p); + mnd_pefree(p, p->header.persistent); } } /* }}} */ @@ -1807,7 +1807,7 @@ { php_mysql_packet_prepare_response *p= (php_mysql_packet_prepare_response *) _packet; if (!alloca) { - mnd_efree(p); + mnd_pefree(p, p->header.persistent); } } /* }}} */ @@ -1866,7 +1866,7 @@ void php_mysqlnd_chg_user_free_mem(void *_packet, zend_bool alloca TSRMLS_DC) { if (!alloca) { - mnd_efree(_packet); + mnd_pefree(_packet, ((php_mysql_packet_chg_user_resp *)_packet)->header.persistent); } } /* }}} */ http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.h?r1=1.8&r2=1.9&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.h diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.8 php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.9 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.h:1.8 Mon Jan 28 18:27:49 2008 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.h Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_wireprotocol.h,v 1.8 2008/01/28 18:27:49 andrey Exp $ */ +/* $Id: mysqlnd_wireprotocol.h,v 1.9 2008/02/14 12:51:00 andrey Exp $ */ #ifndef MYSQLND_WIREPROTOCOL_H #define MYSQLND_WIREPROTOCOL_H @@ -37,10 +37,11 @@ /* Packet handling */ -#define PACKET_INIT(packet, enum_type, c_type) \ +#define PACKET_INIT(packet, enum_type, c_type, pers) \ { \ - packet = (c_type) ecalloc(1, packet_methods[enum_type].struct_size); \ - ((c_type) (packet))->header.m = &packet_methods[enum_type]; \ + packet = (c_type) pecalloc(1, packet_methods[(enum_type)].struct_size, (pers)); \ + ((c_type) (packet))->header.m = &packet_methods[(enum_type)]; \ + ((c_type) (packet))->header.persistent = (pers); \ } #define PACKET_WRITE(packet, conn) ((packet)->header.m->write_to_net((packet), (conn) TSRMLS_CC)) #define PACKET_READ(packet, conn) ((packet)->header.m->read_from_net((packet), (conn) TSRMLS_CC)) @@ -126,8 +127,9 @@ typedef struct st_mysqlnd_packet_header { size_t size; - zend_uchar packet_no; mysqlnd_packet_methods *m; + zend_uchar packet_no; + zend_bool persistent; } mysqlnd_packet_header; /* Server greets the client */ http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/php_mysqlnd.c?r1=1.2&r2=1.3&diff_format=u Index: php-src/ext/mysqlnd/php_mysqlnd.c diff -u php-src/ext/mysqlnd/php_mysqlnd.c:1.2 php-src/ext/mysqlnd/php_mysqlnd.c:1.3 --- php-src/ext/mysqlnd/php_mysqlnd.c:1.2 Tue Jan 29 18:13:12 2008 +++ php-src/ext/mysqlnd/php_mysqlnd.c Thu Feb 14 12:51:00 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mysqlnd.c,v 1.2 2008/01/29 18:13:12 andrey Exp $ */ +/* $Id: php_mysqlnd.c,v 1.3 2008/02/14 12:51:00 andrey Exp $ */ #include "php.h" #include "php_ini.h" #include "mysqlnd.h" @@ -189,7 +189,8 @@ return FAILURE; } dbg->m->set_mode(dbg, MYSQLND_G(debug)); - MYSQLND_G(dbg) = dbg; + MYSQLND_G(dbg) = dbg; + MYSQLND_G(thread_id) = tsrm_thread_id(); } return SUCCESS; } http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/php_mysqlnd.h?r1=1.3&r2=1.4&diff_format=u Index: php-src/ext/mysqlnd/php_mysqlnd.h diff -u php-src/ext/mysqlnd/php_mysqlnd.h:1.3 php-src/ext/mysqlnd/php_mysqlnd.h:1.4 --- php-src/ext/mysqlnd/php_mysqlnd.h:1.3 Mon Dec 31 07:12:12 2007 +++ php-src/ext/mysqlnd/php_mysqlnd.h Thu Feb 14 12:51:00 2008 @@ -17,7 +17,7 @@ | Ulf Wendel <[EMAIL PROTECTED]> | +----------------------------------------------------------------------+ - $Id: php_mysqlnd.h,v 1.3 2007/12/31 07:12:12 sebastian Exp $ + $Id: php_mysqlnd.h,v 1.4 2008/02/14 12:51:00 andrey Exp $ */ #ifndef PHP_MYSQLND_H
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php