Please take our Survey
logo       

Choosing A Webhost:
A web hosting service is a type of Internet hosting service that allows individuals and organizations to provide their own website accessible via the World Wide Web. Web hosts are companies that provide space on a server they own for use by their clients as well as providing Internet connectivity, typically in a data center. Web hosts can also provide data center space and connectivity to the Internet for servers they do not own to be located in their data center, called colocation. more...

Re: APR::Table each() support for multivalued keys: msg#00189

apache.mod-perl.devel

Subject: Re: APR::Table each() support for multivalued keys

Stas Bekman <stas@xxxxxxxxxx> writes:

> Joe Schaefer wrote:

[...]

> > :-) Not for this in mp2. Technically the problem lies with
> > Perl_sv_setsv_flags, which does not copy magic (except for vstrings in
> > 5.8.1+, which explains the current apreq2 code). Once I better
> > understand the purpose of the (currently undocumented?) mg_copy slot in
> > struct mgvtbl, I'll see if I can convince p5p to let Perl_sv_setsv_flags
> > copy magic whenever that slot is occupied.
>
> That may just work, if it doesn't incur a significant delay for the
> generic case.

Heh, I just figured out how to get values to work in apreq2 without
the MAGIC_KEYS hack. The basic problem is that perl does a lazy
fetch of tied hash values - paraphrasing perlguts, it creates
an empty PVLV that has (PERL_MAGIC_tiedelem) get-magic, so it
doesn't actually FETCH the value until perl demands the value.
So when you write something like

my @values = values %$table;

perl generates all the magic PVLV's by iterating over the keys,
and it isn't until the "=" assignment that perl executes the
FETCH on each value. The problem is that our iterator (SvCUR(obj))
has already ran through the key list, so it's value is 0 when those
FETCHES are executed.

However, after taking a closer look at how perl constructs the PVLV,
I realized that this issue can be solved by freezing the iterator's
value during the PVLV's construction. I just committed this idea
to apreq2's cvs by simply cloning the table's SV and copying its
SvCUR setting, and values() seems to work fine. This cloning seems
involves a ton of copying overhead, so maybe a better choice of
iterator could make this be more efficient (after all, it's only
the iterator that we need to clone to get values() working).

--
Joe Schaefer


<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
hardware.arm.at...    cms.citadel.dev...    video.gstreamer...    java.facelets.u...    misc.basics.qna...    web.wiki.instik...    network.uip.use...    xdg.devel/2003-...    tex.bibtex.bibd...    finance.quotesp...    ietf.zeroconf/2...    redhat.blinux.g...    suse.db2/2003-0...    php.phpesp/2004...    uml.devel/2003-...    gnome.labyrinth...    qnx.openqnx.dev...    boot-loaders.gr...    db.dataperfect....    audio.audacity....    linux.uclinux.m...    editors.j.devel...    os.openbsd.tech...    kde.users.multi...   
Home | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe

Navigation