Gisle Aas wrote:
Stas Bekman <[EMAIL PROTECTED]> writes:


Gisle Aas wrote:

Stas Bekman <[EMAIL PROTECTED]> writes:


I've played with it some more. The following program demonstrates some
So again perl doesn't provide enough public API to properly juggle
perl interpreters.

I disagree. The API seems fine to me.

No.

1) There is a bug in perl_alloc. As my program (see my previous post
in this thread) demostrates, perl_alloc will not allocate a private
key for a new interpreter (which is proper for perl_clone'd perls, but
broken for a different perl running in the same interpreter.

2) PERL_SET_CONTEXT has a problem with using the PL_thr_key key, which
may belong to a totally different interpreter.


The design is that there is only one PL_thr_key shared between all
interpreters.  This is enough as each thread can only execute in the
context of one interpreter at a time.  The PL_curintep is only used to
as a flag to indicate if the one PL_thr_key has already been allocated
or not, as well as remember the "initial parent interpreter under
useithreads".

Under mod_perl2 you can have independent pools of interpreters, in which case I doubt you can reuse PL_thr_key, because those interpreters aren't related. Isn't that a problem if two unrelated interpeters try to use the same key, sounds like a *very* bad idea under threads. We have enough mysterious crashes under threads, I won't be surprised that this is one of the reasons. I need to write more tests to tell for sure.


Moreover if perl does get fixed, this modperl2 case is certainly going to crash, since it'll destroy the key but other parent interpreters sharing it will be still running. My test program demonstrates that quite clearly.

As I said in an earlier message, using PL_curintep as a flag makes
perl_alloc() slightly thread-un-safe, but if you just make sure to
allocate a perl in the parent thread first things should be ok.

it doesn't work when you have more than one parent perl interpreter. Moreover PL_curintep is set as soon as at least one parent perl is started. So you will delete those more than once.


And in any case I didn't see perl fixed and it's not quite clear
whether it's going to be fixed at all.


That's true.  Well, at least ActivePerl is fixed then.

:)

That's nice :)

Unfortunately that doesn't help the general case.

--
__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to