It all comes to the same old problem of perl cloning the objects when a new perl thread is spawned either from the perl code or in the case of threaded mpm, when a new interpreter is started (C's perl_clone() is called). When the object is cloned perl doesn't know what we have hidden in the IV slot which is a pointer to a C struct. The Example::CLONE [1] manpage explains how to deal with this issue. Unfortunately our case is much more complicated and there are many questions.
[1] http://apache.org/~stas/Example-CLONE-0.02.tar.gz
[now take your time to read the Example::CLONE manpage in [1] which explains all the issues and shows possible solutions]
...
[only when you are done, please continue]
I believe some of the mp2 APIs are do-able, others are not quite. So I'd like to discuss here some of them.
First of all we have to separate the objects in two groups: those created by users (1) and those created by Apache/mp2 (2).
(1) things which are completely under user control look easy, for example if you create an APR::Table object, we can clone it by copying the table in the spawned thread. The question is what pool should we use for that purpose? We can't use the pool from the parent thread. Since the parent thread may be killed before the child one (for detached threads). and if it's APR::Pool object itself that needs to be cloned, which pool do we use to clone it? How do we avoid leaks?
Ideas? I'm not sure it's doable at all.
(2) Things are even harder with objects created by Apache/mp2. I mean how in the world are we going to clone things like $r or $c? there are all kind of things attached to those objects, including sockets, etc. and now we suddenly need to free those objects too.
Here I'm even more lost.
I'm pretty sure that the various random segfaults and scalar leak reports we get from the ithreads tests in our test suite come from this issue.
-- __________________________________________________________________ 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]
