jason Sun Sep 29 22:09:43 2002 EDT Modified files: /php4/ext/sockets php_sockets.h sockets.c Log: Fix thread safety issue Index: php4/ext/sockets/php_sockets.h diff -u php4/ext/sockets/php_sockets.h:1.24 php4/ext/sockets/php_sockets.h:1.25 --- php4/ext/sockets/php_sockets.h:1.24 Wed May 1 07:08:08 2002 +++ php4/ext/sockets/php_sockets.h Sun Sep 29 22:09:42 2002 @@ -22,7 +22,7 @@ #ifndef PHP_SOCKETS_H #define PHP_SOCKETS_H -/* $Id: php_sockets.h,v 1.24 2002/05/01 11:08:08 mfischer Exp $ */ +/* $Id: php_sockets.h,v 1.25 2002/09/30 02:09:42 jason Exp $ */ #if HAVE_SOCKETS @@ -41,6 +41,8 @@ PHP_MINIT_FUNCTION(sockets); PHP_MINFO_FUNCTION(sockets); +PHP_RINIT_FUNCTION(sockets); +PHP_RSHUTDOWN_FUNCTION(sockets); PHP_FUNCTION(socket_iovec_alloc); PHP_FUNCTION(socket_iovec_free); @@ -103,7 +105,8 @@ int php_read(int bsd_socket, void *buf, int maxlen); ZEND_BEGIN_MODULE_GLOBALS(sockets) - int last_error; + int last_error; + char *strerror_buf; ZEND_END_MODULE_GLOBALS(sockets) #ifdef ZTS Index: php4/ext/sockets/sockets.c diff -u php4/ext/sockets/sockets.c:1.122 php4/ext/sockets/sockets.c:1.123 --- php4/ext/sockets/sockets.c:1.122 Sun Sep 22 23:34:21 2002 +++ php4/ext/sockets/sockets.c Sun Sep 29 22:09:42 2002 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: sockets.c,v 1.122 2002/09/23 03:34:21 jason Exp $ */ +/* $Id: sockets.c,v 1.123 2002/09/30 02:09:42 jason Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -86,7 +86,7 @@ #define PHP_SOCKET_ERROR(socket,msg,errn) socket->error = errn; \ SOCKETS_G(last_error) = errn; \ php_error(E_WARNING, "%s() %s [%d]: %s", \ - get_active_function_name(TSRMLS_C), msg, errn, php_strerror(errn)) + + get_active_function_name(TSRMLS_C), msg, errn, php_strerror(errn +TSRMLS_CC)) static int le_iov; #define le_iov_name "Socket I/O vector" @@ -111,11 +111,6 @@ static unsigned char third_through_seventh_args_force_ref[] = {7, BYREF_NONE, BYREF_NONE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE, BYREF_FORCE}; -/* Global buffer for php_strerror() */ -#if defined(PHP_WIN32) || (! defined(HAVE_HSTRERROR)) -static char php_strerror_buf[10000]; -#endif - /* {{{ sockets_functions[] */ function_entry sockets_functions[] = { @@ -169,8 +164,8 @@ sockets_functions, PHP_MINIT(sockets), NULL, - NULL, - NULL, + PHP_RINIT(sockets), + PHP_RSHUTDOWN(sockets), PHP_MINFO(sockets), NO_VERSION_YET, STANDARD_MODULE_PROPERTIES @@ -207,7 +202,7 @@ efree(php_sock); } -static char *php_strerror(int error); +static char *php_strerror(int error TSRMLS_DC); int open_listen_sock(php_socket **php_sock, int port, int backlog TSRMLS_DC) { @@ -337,7 +332,7 @@ } /* }}} */ -static char *php_strerror(int error) { +static char *php_strerror(int error TSRMLS_DC) { const char *buf; #ifndef PHP_WIN32 @@ -348,8 +343,8 @@ buf = hstrerror(error); #else { - sprintf(php_strerror_buf, "Host lookup error %d", error); - buf = php_strerror_buf; + sprintf(SOCKETS_G(strerror_buf), "Host lookup error %d", +error); + buf = SOCKETS_G(strerror_buf); } #endif } else { @@ -362,10 +357,10 @@ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &tmp, 0, NULL); - strlcpy(php_strerror_buf, (char *) tmp, 10000); + strlcpy(SOCKETS_G(strerror_buf), (char *) tmp, 10000); LocalFree(tmp); - buf = php_strerror_buf; + buf = SOCKETS_G(strerror_buf); } #endif @@ -403,6 +398,7 @@ static void php_sockets_init_globals(zend_sockets_globals *sockets_globals TSRMLS_DC) { sockets_globals->last_error = 0; + sockets_globals->strerror_buf = NULL; } /* {{{ PHP_MINIT_FUNCTION @@ -475,6 +471,25 @@ } /* }}} */ +/* {{{ PHP_RINIT_FUNCTION */ +PHP_RINIT_FUNCTION(sockets) +{ + if (SOCKETS_G(strerror_buf) = emalloc(16384)) + return SUCCESS; + + return FAILURE; +} +/* }}} */ + +/* {{{ PHP_RSHUTDOWN_FUNCTION */ +PHP_RSHUTDOWN_FUNCTION(sockets) +{ + efree(SOCKETS_G(strerror_buf)); + + return SUCCESS; +} +/* }}} */ + int php_sock_array_to_fd_set(zval *sock_array, fd_set *fds, SOCKET *max_fd TSRMLS_DC) { zval **element; php_socket *php_sock; @@ -570,7 +585,7 @@ if (retval == -1) { SOCKETS_G(last_error) = errno; - php_error(E_WARNING, "%s() %s [%d]: %s", get_active_function_name(TSRMLS_C), "unable to select", errno, php_strerror(errno)); + php_error(E_WARNING, "%s() %s [%d]: %s", +get_active_function_name(TSRMLS_C), "unable to select", errno, php_strerror(errno +TSRMLS_CC)); RETURN_FALSE; } @@ -615,7 +630,7 @@ if (!accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) { php_error(E_WARNING, "%s() unable to accept socket connection [%d]: %s", - get_active_function_name(TSRMLS_C), errno, php_strerror(errno)); + get_active_function_name(TSRMLS_C), errno, +php_strerror(errno TSRMLS_CC)); RETURN_FALSE; } @@ -936,7 +951,7 @@ if (IS_INVALID_SOCKET(php_sock)) { SOCKETS_G(last_error) = errno; php_error(E_WARNING, "%s() Unable to create socket [%d]: %s", - get_active_function_name(TSRMLS_C), errno, php_strerror(errno)); + get_active_function_name(TSRMLS_C), errno, +php_strerror(errno TSRMLS_CC)); efree(php_sock); RETURN_FALSE; } @@ -1009,7 +1024,7 @@ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &arg1) == FAILURE) return; - RETURN_STRING(php_strerror(arg1), 1); + RETURN_STRING(php_strerror(arg1 TSRMLS_CC), 1); } /* }}} */ @@ -1914,7 +1929,7 @@ if (socketpair(domain, type, protocol, fds_array) != 0) { SOCKETS_G(last_error) = errno; - php_error(E_WARNING, "%s() unable to create socket pair [%d]: %s", get_active_function_name(TSRMLS_C), errno, php_strerror(errno)); + php_error(E_WARNING, "%s() unable to create socket pair [%d]: %s", +get_active_function_name(TSRMLS_C), errno, php_strerror(errno TSRMLS_CC)); efree(php_sock[0]); efree(php_sock[1]); RETURN_FALSE;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php