For Programmers: Free Programming Magazines  


Home > Archive > PHP Zend Engine > July 2004 > cvs: Zend(PHP_4_3) / zend_ini.c









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author cvs: Zend(PHP_4_3) / zend_ini.c
Wez Furlong

2004-07-30, 3:55 pm

wez Fri Jul 30 11:05:38 2004 EDT

Modified files: (Branch: PHP_4_3)
/Zend zend_ini.c
Log:
MFH: zts fix for ini entries and dl()


http://cvs.php.net/diff.php/Zend/ze...2=1.23.2.4&ty=u
Index: Zend/zend_ini.c
diff -u Zend/zend_ini.c:1.23.2.3 Zend/zend_ini.c:1.23.2.4
--- Zend/zend_ini.c:1.23.2.3 Fri Jul 18 08:03:50 2003
+++ Zend/zend_ini.c Fri Jul 30 11:05:38 2004
@@ -141,10 +141,25 @@
zend_ini_entry *p = ini_entry;
zend_ini_entry *hashed_ini_entry;
zval default_value;
+ HashTable *directives = registered_zend_ini_directives;
+
+#ifdef ZTS
+ /* if we are called during the request, eg: from dl(),
+ * then we should not touch the global directives table,
+ * and should update the per-(request|thread) version instead.
+ * This solves two problems: one is that ini entries for dl()'d
+ * extensions will now work, and the second is that updating the
+ * global hash here from dl() is not mutex protected and can
+ * lead to death.
+ */
+ if (directives != EG(ini_directives)) {
+ directives = EG(ini_directives);
+ }
+#endif

while (p->name) {
p->module_number = module_number;
- if (zend_hash_add(registered_zend_ini_direc
tives, p->name, p->name_length, p, sizeof(zend_ini_entry), (void **) &hashed_ini_entry)==FAILURE) {
+ if (zend_hash_add(directives, p->name, p->name_length, p, sizeof(zend_ini_entry), (void **) &hashed_ini_entry)==FAILURE) {
zend_unregister_ini_entries(module_numbe
r TSRMLS_CC);
return FAILURE;
}
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com