tony2001 Thu Oct 2 08:46:04 2008 UTC Modified files: /php-src/ext/standard info.c streamsfuncs.c Log: use HashPosition to prevent race condition in multithreaded env http://cvs.php.net/viewvc.cgi/php-src/ext/standard/info.c?r1=1.292&r2=1.293&diff_format=u Index: php-src/ext/standard/info.c diff -u php-src/ext/standard/info.c:1.292 php-src/ext/standard/info.c:1.293 --- php-src/ext/standard/info.c:1.292 Wed Aug 13 00:49:59 2008 +++ php-src/ext/standard/info.c Thu Oct 2 08:46:04 2008 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: info.c,v 1.292 2008/08/13 00:49:59 jani Exp $ */ +/* $Id: info.c,v 1.293 2008/10/02 08:46:04 tony2001 Exp $ */ #include "php.h" #include "php_ini.h" @@ -139,14 +139,16 @@ if (ht) { if (zend_hash_num_elements(ht)) { + HashPosition pos; + if (!sapi_module.phpinfo_as_text) { php_info_printf("<tr class=\"v\"><td>Registered %s</td><td>", name); } else { php_info_printf("\nRegistered %s => ", name); } - zend_hash_internal_pointer_reset(ht); - type = zend_hash_get_current_key_ex(ht, &key, &len, NULL, 0, NULL); + zend_hash_internal_pointer_reset_ex(ht, &pos); + type = zend_hash_get_current_key_ex(ht, &key, &len, NULL, 0, &pos); do { switch (type) { case IS_STRING: @@ -157,8 +159,8 @@ break; } - zend_hash_move_forward(ht); - type = zend_hash_get_current_key_ex(ht, &key, &len, NULL, 0, NULL); + zend_hash_move_forward_ex(ht, &pos); + type = zend_hash_get_current_key_ex(ht, &key, &len, NULL, 0, &pos); if (type == IS_STRING || type == IS_UNICODE) { php_info_print(", "); http://cvs.php.net/viewvc.cgi/php-src/ext/standard/streamsfuncs.c?r1=1.122&r2=1.123&diff_format=u Index: php-src/ext/standard/streamsfuncs.c diff -u php-src/ext/standard/streamsfuncs.c:1.122 php-src/ext/standard/streamsfuncs.c:1.123 --- php-src/ext/standard/streamsfuncs.c:1.122 Mon Sep 8 01:30:55 2008 +++ php-src/ext/standard/streamsfuncs.c Thu Oct 2 08:46:04 2008 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: streamsfuncs.c,v 1.122 2008/09/08 01:30:55 felipe Exp $ */ +/* $Id: streamsfuncs.c,v 1.123 2008/10/02 08:46:04 tony2001 Exp $ */ #include "php.h" #include "php_globals.h" @@ -573,13 +573,14 @@ } if ((stream_xport_hash = php_stream_xport_get_hash())) { + HashPosition pos; array_init(return_value); - zend_hash_internal_pointer_reset(stream_xport_hash); + zend_hash_internal_pointer_reset_ex(stream_xport_hash, &pos); while (zend_hash_get_current_key_ex(stream_xport_hash, &stream_xport, &stream_xport_len, - &num_key, 0, NULL) == HASH_KEY_IS_STRING) { + &num_key, 0, &pos) == HASH_KEY_IS_STRING) { add_next_index_rt_stringl(return_value, stream_xport.s, stream_xport_len - 1, ZSTR_DUPLICATE); - zend_hash_move_forward(stream_xport_hash); + zend_hash_move_forward_ex(stream_xport_hash, &pos); } } else { RETURN_FALSE; @@ -601,10 +602,11 @@ } if ((url_stream_wrappers_hash = php_stream_get_url_stream_wrappers_hash())) { + HashPosition pos; array_init(return_value); - for(zend_hash_internal_pointer_reset(url_stream_wrappers_hash); - (key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, NULL)) != HASH_KEY_NON_EXISTANT; - zend_hash_move_forward(url_stream_wrappers_hash)) { + for(zend_hash_internal_pointer_reset_ex(url_stream_wrappers_hash, &pos); + (key_flags = zend_hash_get_current_key_ex(url_stream_wrappers_hash, &stream_protocol, &stream_protocol_len, &num_key, 0, &pos)) != HASH_KEY_NON_EXISTANT; + zend_hash_move_forward_ex(url_stream_wrappers_hash, &pos)) { if (key_flags == HASH_KEY_IS_STRING) { add_next_index_rt_stringl(return_value, stream_protocol.s, stream_protocol_len - 1, ZSTR_DUPLICATE); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php