Re: Thread safe problem on module_registry (Zend API Feature/Change request)
| From: | Edin Kadribasic | Date: | Sun, 04 Mar 2007 19:01:20 +0000 |
| Subject: | Re: Thread safe problem on module_registry (Zend API Feature/Change request) | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-28227@lists.php.net to get a copy of this message | ||
Hi Michael,
Making dl() work on threaded platforms would be nice. Illustrating your
idea with a patch would be very helpful.
Edin
Michael Vergoz wrote:
> 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