diff options
| author | Sara Golemon <pollita@php.net> | 2004-06-21 21:08:05 +0000 |
|---|---|---|
| committer | Sara Golemon <pollita@php.net> | 2004-06-21 21:08:05 +0000 |
| commit | a2c24ae90ead95f8dbed95ff732e6c89bd4275b4 (patch) | |
| tree | 33f37635e277b9ea2cc75997de9229d66a464814 /ext | |
| parent | dc66fb1f10518b1c4712fd4d253ab3fb61428080 (diff) | |
| download | php-git-a2c24ae90ead95f8dbed95ff732e6c89bd4275b4.tar.gz | |
BugFix#28868 (Part Two): This fixes thread unsafety in the userspace
filters which relates to the fix just applied for userspace wrappers.
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/basic_functions.c | 21 | ||||
| -rw-r--r-- | ext/standard/file.h | 1 | ||||
| -rw-r--r-- | ext/standard/user_filters.c | 2 |
3 files changed, 17 insertions, 7 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 970c962848..3f1726c26d 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1163,6 +1163,9 @@ PHP_RINIT_FUNCTION(basic) /* Default to global wrappers only */ FG(stream_wrappers) = NULL; + /* Default to global filters only */ + FG(stream_filters) = NULL; + return SUCCESS; } @@ -1186,6 +1189,18 @@ PHP_RSHUTDOWN_FUNCTION(basic) } STR_FREE(BG(locale_string)); + if (FG(stream_wrappers)) { + zend_hash_destroy(FG(stream_wrappers)); + efree(FG(stream_wrappers)); + FG(stream_wrappers) = NULL; + } + + if (FG(stream_filters)) { + zend_hash_destroy(FG(stream_filters)); + efree(FG(stream_filters)); + FG(stream_filters) = NULL; + } + PHP_RSHUTDOWN(filestat)(SHUTDOWN_FUNC_ARGS_PASSTHRU); #ifdef HAVE_SYSLOG_H PHP_RSHUTDOWN(syslog)(SHUTDOWN_FUNC_ARGS_PASSTHRU); @@ -1200,12 +1215,6 @@ PHP_RSHUTDOWN_FUNCTION(basic) BG(user_tick_functions) = NULL; } - if (FG(stream_wrappers)) { - zend_hash_destroy(FG(stream_wrappers)); - efree(FG(stream_wrappers)); - FG(stream_wrappers) = NULL; - } - PHP_RSHUTDOWN(user_filters)(SHUTDOWN_FUNC_ARGS_PASSTHRU); return SUCCESS; diff --git a/ext/standard/file.h b/ext/standard/file.h index aba42e01bb..e5c23e6a24 100644 --- a/ext/standard/file.h +++ b/ext/standard/file.h @@ -114,6 +114,7 @@ typedef struct { char *user_stream_current_filename; /* for simple recursion protection */ php_stream_context *default_context; HashTable *stream_wrappers; /* per-request copy of url_stream_wrappers_hash */ + HashTable *stream_filters; /* per-request copy of stream_filters_hash */ } php_file_globals; #ifdef ZTS diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index b67815d663..e1ecf3c206 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -528,7 +528,7 @@ PHP_FUNCTION(stream_filter_register) if (zend_hash_add(BG(user_filter_map), filtername, filtername_len, (void*)fdat, sizeof(*fdat) + classname_len, NULL) == SUCCESS && - php_stream_filter_register_factory(filtername, &user_filter_factory TSRMLS_CC) == SUCCESS) { + php_stream_filter_register_factory_volatile(filtername, &user_filter_factory TSRMLS_CC) == SUCCESS) { RETVAL_TRUE; } |
