OK, I'm with you on this so far, but how do you differentiate ub_write, log_message, and sapi_error on different threads? It would seem to me that you'd need to have different functions for each thread as the calls to ub_write don't include some indication of the thread that this is being called under.
Then again, maybe it's in the php_embed_module if it's tightly bound to the thread... For example, if I set the title in the thread-bound php_embed_module to something specific for each thread then check that within the call to ub_write() I can see who this 'write' belongs to.
If I'm missing the boat on these function callbacks, or there's an easier way to capture stdout, stderr, etc. in a ZTS-enabled PHP/Zend environment, please let me know.
I'm sorry if I seem a bit dense, but I'm trying to figure things out and design the code before I start writing it.
Bob
On Feb 28, 2005, at 11:56 PM, Wez Furlong wrote:
ZTS enabled PHP has "strong thread affinity". Calls into the engine are thread-safe provided that you have previously initialized the engine on that thread.
Note that you should not efree() memory allocated on one thread from outside of that thread, on pain of segfault. eg: resources from one thread cannot be safely passed on to another thread.
--Wez.
On Mon, 28 Feb 2005 14:24:05 -0600, Bob Beaty <[EMAIL PROTECTED]> wrote:Which is my concern.
I've looked at the code differences, and it appears that this modification works for running different source files through the engine, but I'm concerned about the safety of zend_eval_string() if I initialize the engine in one thread and then try to have several threads calling zend_eval_string() on different strings.
I'm not convinced that simply making the php_embed_module thread-local
is going to work either. I'm concerned that the engine was written with
the idea that only one thread can be initializing the php_embed_module
and making calls to zend_eval_string(). If this is the case, then I'd
have to re-write a lot more than php_embed.c to get thread-safety out
of the engine.
Or am I on the wrong track?
Bob
On Feb 28, 2005, at 1:08 PM, Vadka wrote:
On Mon, 28 Feb 2005, Alan Knowles wrote:
these still need tidying up alot, but the do work. http://docs.akbkhome.com/php_embed.c.txt http://docs.akbkhome.com/php_embed.h.txt replace the code in php_embed with them, make sure you compile with the zts enabled, and the macros's are similar to the original embed (use threaded start call at application start up, and thread start /start end within the pthread_start(...callback..) methodThread safeness is not a problem for a single thread. The problem is to call user functions from different threads (tsrm_ls pointed to somewhere in different threads, global vars etc are not protected).Thanks, Bob ([EMAIL PROTECTED]) The Man from S.P.U.D. We will write no code before it's designed.
Thanks, Bob ([EMAIL PROTECTED]) The Man from S.P.U.D. We will write no code before it's designed.