|
|
Choosing A Webhost: |
Re: APR::Table each() support for multivalued keys: msg#00189apache.mod-perl.devel
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> |
|---|---|---|
| Previous by Date: | Re: [Patch mp2] Deprecate $Apache::Server::StrictPerlSections in favor of a default of 1, Philippe M. Chiasson |
|---|---|
| Next by Date: | Re: [Patch mp2] Deprecate $Apache::Server::StrictPerlSections in favor of a default of 1, Stas Bekman |
| Previous by Thread: | Re: APR::Table each() support for multivalued keys, Stas Bekman |
| Next by Thread: | Re: APR::Table each() support for multivalued keys, Joe Schaefer |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
Free MagazinesCisco NewsReceive 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 |