perl-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stas Bekman <s...@stason.org>
Subject Re: [rfc] APR::Table & polymorphic values
Date Wed, 04 Jun 2003 01:56:38 GMT
Joe Schaefer wrote:
> Stas Bekman <stas@stason.org> writes:
> 
> [...]
> 
> 
>>http://archive.develooper.com/perl5-porters@perl.org/msg96172.html
> 
> 
> Thanks for the link!
> 
> 
>>I haven't read the whole thread, but saw Tim Bunce suggesting later in
>>this thread not to use SvFAKE:
>>http://archive.develooper.com/perl5-porters@perl.org/msg95102.html
> 
> 
> Using SvLEN = 0 seems to be the cleanest solution.  Unfortunately,
> setting SvLEN = 0 prevents correct sv_2iv conversion w/ 5.8.  The bug 
> is caused by testing for SvLEN > 0 instead of SvCUR > 0 in Perl_sv_2iv. 
> I don't know if bleadperl has fixed this, but it's probably behaved 
> this way for quite a while.

Please perlbug this to p5p.

>>May be all you need is to manipulate the pointers. So in normal case
>>SVPV will point to the first char, in apreq case it'll point to the
>>char the real data starts from. Am I shooting far off the target?
> 
> 
> In the normal case:
> 
>    sv = newSVpv(data,0);
> 
> perl mallocs space for a copy and does a strcpy(SvPVX(sv), data).  
> That's not good enough for apreq- we really need SvPVX(sv) == data 
> in order to get at the metadata in front of &data[0].

The real problem is that it's probably a bad idea to rely on non-public APIs, 
since these behaviors can change at will. Perhaps after all, using either a 
sub-class, or an optional callback will be a more robust solution.

>>Besides that, once SvFAKE what happens if users try to modify it?
> 
> 
> SvFAKE | SvREADONLY is what perl uses to mark shared sv's, so I thought
> I could borrow those flags here.  Unfortunately that doesn't seem to
> work very well with the tiehash table API (t/modperl/env generates
> lots of "Attempt to free non-existent shared string ..." warnings).

And isn't all this stuff quite new in 5.8, and doesn't really work with 5.6?

Still, once user tries to modify the data, what happens to meta-data? When COW 
is performed, does it copy the whole thing or just whatever was pointed by SvCUR?

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


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Mime
View raw message