]> granicus.if.org Git - php/commitdiff
MFH: fix #41134 (zend_ts_hash_clean not thread-safe)
authorAntony Dovgal <tony2001@php.net>
Fri, 11 May 2007 12:21:26 +0000 (12:21 +0000)
committerAntony Dovgal <tony2001@php.net>
Fri, 11 May 2007 12:21:26 +0000 (12:21 +0000)
fix also zend_ts_hash_*destroy()

Zend/zend_ts_hash.c

index d116a67c794b1d0356256c50d3368e3d8a69723a..e3739a39c52ebab3660eddd1c83bc150957e304d 100644 (file)
@@ -81,17 +81,22 @@ ZEND_API int _zend_ts_hash_init_ex(TsHashTable *ht, uint nSize, hash_func_t pHas
 
 ZEND_API void zend_ts_hash_destroy(TsHashTable *ht)
 {
+       begin_write(ht);
+       zend_hash_destroy(TS_HASH(ht));
+       end_write(ht);
+
 #ifdef ZTS
        tsrm_mutex_free(ht->mx_reader);
        tsrm_mutex_free(ht->mx_writer);
 #endif
-       zend_hash_destroy(TS_HASH(ht));
 }
 
 ZEND_API void zend_ts_hash_clean(TsHashTable *ht)
 {
        ht->reader = 0;
+       begin_write(ht);
        zend_hash_clean(TS_HASH(ht));
+       end_write(ht);
 }
 
 ZEND_API int _zend_ts_hash_add_or_update(TsHashTable *ht, char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)
@@ -140,11 +145,14 @@ ZEND_API int zend_ts_hash_add_empty_element(TsHashTable *ht, char *arKey, uint n
 
 ZEND_API void zend_ts_hash_graceful_destroy(TsHashTable *ht)
 {
+       begin_write(ht);
+       zend_hash_graceful_destroy(TS_HASH(ht));
+       end_write(ht);
+
 #ifdef ZTS
        tsrm_mutex_free(ht->mx_reader);
        tsrm_mutex_free(ht->mx_reader);
 #endif
-       zend_hash_graceful_destroy(TS_HASH(ht));
 }
 
 ZEND_API void zend_ts_hash_apply(TsHashTable *ht, apply_func_t apply_func TSRMLS_DC)