cvs: /php4 main.c /php4/ext/standard fsock.c fsock.h

From: Date: Wed, 01 Dec 1999 17:07:56 +0000
Subject: cvs: /php4 main.c /php4/ext/standard fsock.c fsock.h
Groups: php.version4 
Request: Send a blank email to php-version4+get-7185@lists.php.net to get a copy of this message
sas Wed Dec 1 12:07:56 1999 EDT Modified files: /php4 main.c /php4/ext/standard fsock.c fsock.h Log: Make fsock module thread-safe Index: php4/main.c diff -u php4/main.c:1.141 php4/main.c:1.142 --- php4/main.c:1.141 Tue Nov 30 15:18:06 1999 +++ php4/main.c Wed Dec 1 12:07:24 1999 @@ -19,7 +19,7 @@ */ -/* $Id: main.c,v 1.141 1999/11/30 20:18:06 andi Exp $ */ +/* $Id: main.c,v 1.142 1999/12/01 17:07:24 sas Exp $ */ #include <stdio.h> @@ -850,16 +850,8 @@ static void core_globals_ctor(php_core_globals *core_globals) { memset(core_globals,0,sizeof(*core_globals)); - zend_hash_init(&core_globals->ht_fsock_keys, 0, NULL, NULL, 1); - zend_hash_init(&core_globals->ht_fsock_socks, 0, NULL, (int (*)(void *))php_msock_destroy, 1); } - -static void core_globals_dtor(php_core_globals *core_globals) -{ - zend_hash_destroy(&core_globals->ht_fsock_keys); - zend_hash_destroy(&core_globals->ht_fsock_socks); -} #endif @@ -904,7 +896,7 @@ #ifdef ZTS tsrm_set_new_thread_end_handler(php_new_thread_end_handler); executor_globals = ts_resource(executor_globals_id); - core_globals_id = ts_allocate_id(sizeof(php_core_globals), core_globals_ctor, core_globals_dtor); + core_globals_id = ts_allocate_id(sizeof(php_core_globals), core_globals_ctor, NULL); core_globals = ts_resource(core_globals_id); #endif EG(error_reporting) = E_ALL & ~E_NOTICE; Index: php4/ext/standard/fsock.c diff -u php4/ext/standard/fsock.c:1.26 php4/ext/standard/fsock.c:1.27 --- php4/ext/standard/fsock.c:1.26 Sun Oct 24 14:16:16 1999 +++ php4/ext/standard/fsock.c Wed Dec 1 12:07:25 1999 @@ -14,10 +14,11 @@ +----------------------------------------------------------------------+ | Authors: Paul Panotzki - Bunyip Information Systems | | Jim Winstead (jimw@php.net) | + | Sascha Schumann <sascha@schumann.cx> | +----------------------------------------------------------------------+ */ -/* $Id: fsock.c,v 1.26 1999/10/24 18:16:16 thies Exp $ */ +/* $Id: fsock.c,v 1.27 1999/12/01 17:07:25 sas Exp $ */ /* Synced with php3 revision 1.121 1999-06-18 [ssb] */ /* Synced with php3 revision 1.133 1999-07-21 [sas] */ @@ -68,7 +69,10 @@ #include "url.h" #include "fsock.h" -#ifndef ZTS +#ifdef ZTS +static int fsock_globals_id; +#else +static php_fsock_globals fsock_globals; extern int le_fp; #endif @@ -105,8 +109,6 @@ size_t chunk_size; }; -static struct php3i_sockbuf *phpsockbuf; - typedef struct php3i_sockbuf php3i_sockbuf; php3_module_entry fsock_module_entry = { @@ -387,17 +389,15 @@ if(sock->readbuf) pefree(sock->readbuf, sock->persistent); \ if(sock->prev) sock->prev->next = sock->next; \ if(sock->next) sock->next->prev = sock->prev; \ - if(sock == phpsockbuf) \ - phpsockbuf = sock->next; \ + if(sock == FG(phpsockbuf)) \ + FG(phpsockbuf) = sock->next; \ pefree(sock, sock->persistent) - -static size_t def_chunk_size = CHUNK_SIZE; -static void php_cleanup_sockbuf(int persistent) +static void php_cleanup_sockbuf(int persistent FLS_DC) { php3i_sockbuf *now, *next; - for(now = phpsockbuf; now; now = next) { + for(now = FG(phpsockbuf); now; now = next) { next = now->next; if(now->persistent == persistent) { SOCK_DESTROY(now); @@ -410,14 +410,15 @@ #define WRITEPTR(sock) ((sock)->readbuf + (sock)->writepos) #define SOCK_FIND(sock,socket) \ php3i_sockbuf *sock; \ - sock = _php3_sock_find(socket); \ - if(!sock) sock = _php3_sock_create(socket) + FLS_FETCH(); \ + sock = _php3_sock_find(socket FLS_CC); \ + if(!sock) sock = _php3_sock_create(socket FLS_CC) -static php3i_sockbuf *_php3_sock_find(int socket) +static php3i_sockbuf *_php3_sock_find(int socket FLS_DC) { php3i_sockbuf *buf = NULL, *tmp; - for(tmp = phpsockbuf; tmp; tmp = tmp->next) + for(tmp = FG(phpsockbuf); tmp; tmp = tmp->next) if(tmp->socket == socket) { buf = tmp; break; @@ -426,19 +427,19 @@ return buf; } -static php3i_sockbuf *_php3_sock_create(int socket) +static php3i_sockbuf *_php3_sock_create(int socket FLS_DC) { php3i_sockbuf *sock; int persistent = _php3_is_persistent_sock(socket); sock = pecalloc(sizeof(*sock), 1, persistent); sock->socket = socket; - if((sock->next = phpsockbuf)) - phpsockbuf->prev = sock; + if((sock->next = FG(phpsockbuf))) + FG(phpsockbuf)->prev = sock; sock->persistent = persistent; sock->is_blocked = 1; - sock->chunk_size = def_chunk_size; - phpsockbuf = sock; + sock->chunk_size = FG(def_chunk_size); + FG(phpsockbuf) = sock; return sock; } @@ -446,11 +447,12 @@ size_t _php3_sock_set_def_chunk_size(size_t size) { size_t old; + FLS_FETCH(); - old = def_chunk_size; + old = FG(def_chunk_size); if(size <= CHUNK_SIZE || size > 0) - def_chunk_size = size; + FG(def_chunk_size) = size; return old; } @@ -459,8 +461,9 @@ { int ret = 0; php3i_sockbuf *sock; + FLS_FETCH(); - sock = _php3_sock_find(socket); + sock = _php3_sock_find(socket FLS_CC); if(sock) { ret = 1; SOCK_DESTROY(sock); @@ -485,8 +488,9 @@ { int ret = 0; php3i_sockbuf *sock; + FLS_FETCH(); - sock = _php3_sock_find(socket); + sock = _php3_sock_find(socket FLS_CC); if(sock) { if(!sock->persistent) { SOCK_CLOSE(sock->socket); @@ -709,11 +713,27 @@ /* }}} */ /* {{{ php3_minit_fsock */ +static void fsock_globals_ctor(FLS_D) +{ + zend_hash_init(&FG(ht_fsock_keys), 0, NULL, NULL, 1); + zend_hash_init(&FG(ht_fsock_socks), 0, NULL, (int (*)(void *))php_msock_destroy, 1); + FG(def_chunk_size) = CHUNK_SIZE; + FG(phpsockbuf) = NULL; +} + +static void fsock_globals_dtor(FLS_D) +{ + zend_hash_destroy(&FG(ht_fsock_socks)); + zend_hash_destroy(&FG(ht_fsock_keys)); + php_cleanup_sockbuf(1 FLS_CC); +} + PHP_MINIT_FUNCTION(fsock) { -#ifndef ZTS - zend_hash_init(&PG(ht_fsock_keys), 0, NULL, NULL, 1); - zend_hash_init(&PG(ht_fsock_socks), 0, NULL, (int (*)(void *))php_msock_destroy, 1); +#ifdef ZTS + fsock_globals_id = ts_allocate_id(sizeof(php_fsock_globals), fsock_globals_ctor, fsock_globals_dtor); +#else + fsock_globals_ctor(FLS_C); #endif return SUCCESS; } @@ -723,10 +743,8 @@ PHP_MSHUTDOWN_FUNCTION(fsock) { #ifndef ZTS - zend_hash_destroy(&PG(ht_fsock_socks)); - zend_hash_destroy(&PG(ht_fsock_keys)); + fsock_globals_dtor(FLS_C); #endif - php_cleanup_sockbuf(1); return SUCCESS; } /* }}} */ @@ -734,7 +752,9 @@ PHP_RSHUTDOWN_FUNCTION(fsock) { - php_cleanup_sockbuf(0); + FLS_FETCH(); + + php_cleanup_sockbuf(0 FLS_CC); return SUCCESS; } Index: php4/ext/standard/fsock.h diff -u php4/ext/standard/fsock.h:1.13 php4/ext/standard/fsock.h:1.14 --- php4/ext/standard/fsock.h:1.13 Wed Aug 25 12:24:14 1999 +++ php4/ext/standard/fsock.h Wed Dec 1 12:07:25 1999 @@ -27,7 +27,7 @@ | Jim Winstead (jimw@php.net) | +----------------------------------------------------------------------+ */ -/* $Id: fsock.h,v 1.13 1999/08/25 16:24:14 andi Exp $ */ +/* $Id: fsock.h,v 1.14 1999/12/01 17:07:25 sas Exp $ */ /* Synced with php3 revision 1.24 1999-06-18 [ssb] */ @@ -76,5 +76,28 @@ PHP_MINIT_FUNCTION(fsock); PHP_MSHUTDOWN_FUNCTION(fsock); PHP_RSHUTDOWN_FUNCTION(fsock); + +typedef struct { + HashTable ht_fsock_keys; + HashTable ht_fsock_socks; + struct php3i_sockbuf *phpsockbuf; + size_t def_chunk_size; +} php_fsock_globals; + +#ifdef ZTS +#define FLS_D php_fsock_globals *fsock_globals +#define FLS_DC , FLS_D +#define FLS_C fsock_globals +#define FLS_CC , FLS_C +#define FG(v) (fsock_globals->v) +#define FLS_FETCH() php_fsock_globals *fsock_globals = ts_resource(fsock_globals_id) +#else +#define FLS_D +#define FLS_DC +#define FLS_C +#define FLS_CC +#define FG(v) (fsock_globals.v) +#define FLS_FETCH() +#endif #endif /* _FSOCK_H */

« previous php.version4 (#7185) next »