perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stas Bekman <>
Subject Re: Build of mod_perl 2.0.0 fails on bleadperl - no more HvPMROOT()
Date Thu, 07 Jul 2005 10:10:39 GMT
Apologies for not replying earlier. I'm now back to work on this issue.

Nicholas Clark wrote:
> On Sun, Jun 12, 2005 at 07:29:02PM +1000, Stas Bekman wrote:
>>Thanks Steve for the suggestion, but this is not good since it requires 
>>aTHX + PERL_SET_CONTEXT which creates a chicken and an egg problem. Any 
>>other more suitable candidates to use instead of:
>> HvPMROOT(*Perl_Imodglobal_ptr(thx)) = (PMOP*)interp
>>It needs to be really quick, as we already have a way too many context 
>>switch overheads in the perl-core.

> Is all this messing around with hiding things in HvPMROOT because really
> mod_perl 2 would like a private pointer of its own in the perl interpreter
> structure?

No, it wants to have a reference from the current perl interpreter to
modperl_interp_t which is needed to be able to put the perl interpreter 
back to the pool of interpreters and such.

struct modperl_interp_t {
     modperl_interp_pool_t *mip;
     PerlInterpreter *perl;
     int num_requests;
     U8 flags;
     request_rec *request;
     int refcnt;
#ifdef MP_TRACE
     unsigned long tid;

Of course we could have created a special entry in modglobal and store it 
there, but since the operation of reading and setting of modperl_interp_t 
is very frequent, it must be very fast. I suppose Doug has chosen
HvPMROOT(*Perl_Imodglobal_ptr(thx)) as the quickest possible way to 
accomplish that.

> If you really really feel the need to cheat then you have the choice of these:
> #define xhv_keys xiv_u.xivu_iv
> typedef struct {
>     STRLEN	xhv_fill;	/* how full xhv_array currently is */
>     STRLEN	xhv_max;	/* subscript of last element of xhv_array */
>     union {
> 	IV	xivu_iv;	/* integer value or pv offset */
> 	UV	xivu_uv;
> 	void *	xivu_p1;
>     }		xiv_u;
>     MAGIC*	xmg_magic;	/* magic for scalar array */
>     HV*		xmg_stash;	/* class package */
> } xpvhv_allocated;
> Only xmg_magic and xmg_stash aren't needed for the operation of a regular hash.
> I've no idea what modglobal_ptr gets used for throughout the perl codebase,
> but hanging something that isn't MAGIC* from xmg_magic feels like a bad plan.

You mean because it might be used later on for some purpose? If so any 
other ideas for a quick stash inside the interpreter that is not used by 
perl itself? May be something else besides modglobal?

Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker     mod_perl Guide --->

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message