Hi I am currently developing a kind of application server based on PHP language. I use modifications I made on SAPI embed/. I use threads massively.
In my application design, every thread can load different PHP modules. In practise, modules are loaded just before php_request_startup() and they are unloaded after php_request_shutdown() The problem I face is that I randomly receive PHP warnings : <br /> <b>Warning</b>: Module 'X7V3' already loaded in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: Function registration failed - duplicate name - XXXXXXXXXXXXXXXXXX in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: X7V3: Unable to register functions, unable to load in <b>Unknown</b> on line <b>0</b><br / I looked at Zend/zend_API.c and I realized that 2 variables, "module_count" and "module_registry", are not thread safe and that there is a comment recomending mutex use for these 2 variables. I had asked for a Feature/Change request on bugs.php.net (#40668) but it has been closed :s Then I learnt (thank you Tony) that dl() function is deactivated in ZTS mode and I also learnt from Tony that this kind of problem was not a priority ... I think it is important to settle this problem at least for IIS and Apache Threadpool/Worker servers. At last, I would like to share my view on ZTS vs mutex use : Mutex : pros : uses slightly less memory cons : does not give possibility to create module spaces by thread - uses more processor resource (as there is a mutualized lock for various threads) ZTS : pros : possibility to create module spaces - less processor cons : slight impact on memory This is why I propose to use a ZTS resource instead of mutex to make "module_registry" thread safe. The use of ZTS resources will give a thread the ability to have its own module HashTable. In both cases (mutex or ZTS resource), we will be able to reactivate the dl() function in ZTS mode. I propose to develop the ZTS version resource. Or shall I let you do it ? Kind regards Michael Vergoz