Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:15240 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 34483 invoked by uid 1010); 1 Mar 2005 10:35:50 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 34468 invoked from network); 1 Mar 2005 10:35:50 -0000 Received: from unknown (HELO gmail.com) (127.0.0.1) by localhost with SMTP; 1 Mar 2005 10:35:50 -0000 X-Host-Fingerprint: 64.233.184.203 wproxy.gmail.com Linux 2.4/2.6 Received: from ([64.233.184.203:44547] helo=wproxy.gmail.com) by pb1.pair.com (ecelerity HEAD r(5124)) with SMTP id 39/12-43857-58544224 for ; Tue, 01 Mar 2005 05:35:49 -0500 Received: by wproxy.gmail.com with SMTP id 57so12823wri for ; Tue, 01 Mar 2005 02:35:47 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:in-reply-to:references:mime-version:content-type:message-id:cc:from:subject:date:to:x-mailer; b=rifQ4AynDveEADWhJxkGJhw44HJ9HDaEAX9DhTnCKetbUsYMWHFqs0llnhOIzRst239T34ceeE20vVYb8QhR082ZrzjvKVGVXmqRIb6mB1I5jIfqLMk1lG9+QJjkfMnJFNjdwvDTLDlTRa/+bMry0+kC201UUVys7/9NMQjDTvs= Received: by 10.54.50.31 with SMTP id x31mr25123wrx; Tue, 01 Mar 2005 02:35:47 -0800 (PST) Received: from ?10.1.1.214? ([67.176.143.57]) by smtp.gmail.com with ESMTP id 45sm2415wri.2005.03.01.02.35.46; Tue, 01 Mar 2005 02:35:46 -0800 (PST) In-Reply-To: <4e89b426050228215637f000f9@mail.gmail.com> References: <2005022807371112877%drbob@TheManFromSPUDcom> <42233717.9050107@akbkhome.com> <729eaf208f6ab01379951b88d8f90b76@gmail.com> <4e89b426050228215637f000f9@mail.gmail.com> Mime-Version: 1.0 (Apple Message framework v619.2) Content-Type: multipart/alternative; boundary=Apple-Mail-11-369641277 Message-ID: Cc: internals@lists.php.net Date: Tue, 1 Mar 2005 04:35:43 -0600 To: Wez Furlong X-Mailer: Apple Mail (2.619.2) Subject: Re: [PHP-DEV] How to embed PHP5 into multi-threaded C app? From: drbobbeaty@gmail.com (Bob Beaty) --Apple-Mail-11-369641277 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Wez, 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 > 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..) method >>> Thread 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 (drbob@TheManFromSPUD.com) >> The Man from S.P.U.D. >> We will write no code before it's designed. >> >> > > Thanks, Bob (drbob@TheManFromSPUD.com) The Man from S.P.U.D. We will write no code before it's designed. --Apple-Mail-11-369641277--