summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Greene <jason@php.net>2001-07-30 19:40:29 +0000
committerJason Greene <jason@php.net>2001-07-30 19:40:29 +0000
commit40c7f095097df14bf55207220c98b2c6cb6f272c (patch)
treef857dcc60944fb621c9510d4595e2bd1ebe84fde
parent3b7bc2535abea052548fe7635f2c3ec530af4ae7 (diff)
downloadphp-git-40c7f095097df14bf55207220c98b2c6cb6f272c.tar.gz
Fully implement new thread safe model.
Fix ws.
-rwxr-xr-xext/pcntl/pcntl.c45
-rw-r--r--ext/pcntl/php_pcntl.h7
2 files changed, 31 insertions, 21 deletions
diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c
index 23b771e697..890f20c071 100755
--- a/ext/pcntl/pcntl.c
+++ b/ext/pcntl/pcntl.c
@@ -151,32 +151,44 @@ void php_register_signal_constants(INIT_FUNC_ARGS)
REGISTER_LONG_CONSTANT("SIGSYS", (long) SIGSYS, CONST_CS | CONST_PERSISTENT);
}
-PHP_MINIT_FUNCTION(pcntl)
+static void php_pcntl_init_globals(zend_pcntl_globals *pcntl_globals)
{
- PCNTL_LS_FETCH();
-
- php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
- zend_hash_init(&PCNTL_G(php_signal_table), 16, NULL, NULL, 1);
+ zend_hash_init(&pcntl_globals->php_signal_table, 16, NULL, NULL, 1);
/* Just in case ... */
- memset(&PCNTL_G(php_signal_queue),0,sizeof(PCNTL_G(php_signal_queue)));
+ memset(&pcntl_globals->php_signal_queue,0,sizeof(pcntl_globals->php_signal_queue));
- zend_llist_init(&PCNTL_G(php_signal_queue), sizeof (long), NULL, 1);
- PCNTL_G(signal_queue_ready)=0;
- PCNTL_G(processing_signal_queue)=0;
+ zend_llist_init(&pcntl_globals->php_signal_queue, sizeof (long), NULL, 1);
+ pcntl_globals->signal_queue_ready=0;
+ pcntl_globals->processing_signal_queue=0;
+}
+
+static void php_pcntl_shutdown_globals(zend_pcntl_globals *pcntl_globals)
+{
+ zend_hash_destroy(&pcntl_globals->php_signal_table);
+ zend_llist_destroy(&pcntl_globals->php_signal_queue);
+}
+
+PHP_MINIT_FUNCTION(pcntl)
+{
+ php_register_signal_constants(INIT_FUNC_ARGS_PASSTHRU);
+ ZEND_INIT_MODULE_GLOBALS(pcntl, php_pcntl_init_globals, php_pcntl_shutdown_globals);
if (zend_register_extension(&pcntl_extension_entry, 0)==FAILURE)
return FAILURE;
return SUCCESS;
}
+
PHP_MSHUTDOWN_FUNCTION(pcntl)
{
- PCNTL_LS_FETCH();
-
+
zend_hash_destroy(&PCNTL_G(php_signal_table));
zend_llist_destroy(&PCNTL_G(php_signal_queue));
return SUCCESS;
}
+
+
+
PHP_MINFO_FUNCTION(pcntl)
{
php_info_print_table_start();
@@ -355,7 +367,6 @@ PHP_FUNCTION(pcntl_signal)
{
zval **signo, **handle;
char *func_name;
- PCNTL_LS_FETCH();
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &signo, &handle) == FAILURE) {
WRONG_PARAM_COUNT;
@@ -404,10 +415,9 @@ static void old_pcntl_signal_handler(int signo)
{
char *func_name;
zval *param, *call_name, *retval;
- PCNTL_LS_FETCH();
TSRMLS_FETCH();
- DEBUG_OUT("Caught signal: %d\n", signo);
+ DEBUG_OUT("Caught signal: %d\n", signo);
if (zend_hash_index_find(&PCNTL_G(php_signal_table), (long) signo, (void *) &func_name)==FAILURE) {
DEBUG_OUT("Signl handler not fount");
return;
@@ -434,7 +444,7 @@ static void old_pcntl_signal_handler(int signo)
static void pcntl_signal_handler(int signo)
{
long signal_num=signo;
- PCNTL_LS_FETCH();
+ TSRMLS_FETCH();
DEBUG_OUT("Caught signo %d\n", signo);
if (! PCNTL_G(processing_signal_queue) && pcntl_zend_extension_active ) {
@@ -450,6 +460,8 @@ static void pcntl_signal_handler(int signo)
int pcntl_zend_extension_startup(zend_extension *extension)
{
+ TSRMLS_FETCH();
+
DEBUG_OUT("Statup Called\n");
pcntl_zend_extension_active=1;
CG(extended_info) = 1;
@@ -464,6 +476,8 @@ void pcntl_zend_extension_shutdown(zend_extension *extension)
void pcntl_zend_extension_activate(void)
{
+ TSRMLS_FETCH();
+
DEBUG_OUT("Activate Called\n");
pcntl_zend_extension_active=1;
CG(extended_info) = 1;
@@ -483,7 +497,6 @@ void pcntl_zend_extension_statement_handler(zend_op_array *op_array)
zend_llist_element *element;
zval *param, *call_name, *retval;
char *func_name;
- PCNTL_LS_FETCH();
TSRMLS_FETCH();
/* Bail if the queue is empty or if we are already playing the queue*/
diff --git a/ext/pcntl/php_pcntl.h b/ext/pcntl/php_pcntl.h
index 347c77f275..7154dcd4de 100644
--- a/ext/pcntl/php_pcntl.h
+++ b/ext/pcntl/php_pcntl.h
@@ -63,13 +63,10 @@ ZEND_BEGIN_MODULE_GLOBALS(pcntl)
int signal_queue_ready;
int processing_signal_queue;
ZEND_END_MODULE_GLOBALS(pcntl)
-
#ifdef ZTS
-#define PCNTL_G(v) (pcntl_globals->v)
-#define PCNTL_LS_FETCH() zend_pcntl_globals *pcntl_globals = ts_resource(pcntl_globals_id)
+# define PCNTL_G(v) TSRMG(pcntl_globals_id, zend_pcntl_globals *, v)
#else
-#define PCNTL_G(v) (pcntl_globals.v)
-#define PCNTL_LS_FETCH()
+# define PCNTL_G(v) (pcntl_globals.v)
#endif
#endif /* PHP_PCNTL_H */