Stas Bekman <[EMAIL PROTECTED]> writes: >> +static MP_INLINE SV *mpxs_APR__Table_make(pTHX_ SV *p_sv, int nelts) >> +{ >> + apr_pool_t *p = mp_xs_sv2_APR__Pool(p_sv); >> + apr_table_t *t = apr_table_make(p, nelts); >> + SV *t_sv = modperl_hash_tie(aTHX_ "APR::Table", Nullsv, t); >> + sv_magic(SvRV(t_sv), p_sv, PERL_MAGIC_ext, Nullch, -1); >> + return t_sv; >> +} > > And that just happened to work, since it wasn't 5.8.x+ > > sv_magic(SvRV(t_sv), p_sv, PERL_MAGIC_ext, Nullch, -1); > > can't be used since it's already used by: > > MP_INLINE SV *modperl_hash_tie(pTHX_ > [...] > > /* Prefetch magic requires perl 5.8 */ > #if ((PERL_REVISION == 5) && (PERL_VERSION >= 8)) > > sv_magic(hv, NULL, PERL_MAGIC_ext, Nullch, -1); > SvMAGIC(hv)->mg_virtual = (MGVTBL *)&modperl_table_magic_prefetch; > SvMAGIC(hv)->mg_flags |= MGf_COPY; > > #endif /* End of prefetch magic */ > > sv_magic(hv, rsv, PERL_MAGIC_tied, Nullch, 0); > > so it happened to worked before I guess because I was testing with 5.6.x, > > with 5.8.x, if I dump the table object it has only one _ext magic. > > so we need to use some other magic to create this dependency.
You probably just need to use sv_magicext with 5.8.x, because sv_magic doesn't seem to permit duplicates. The only issue then is ordering: you want the mpxs_APR__Table_make one further down the SvMAGIC chain than the modperl_hash_tie one. -- Joe Schaefer --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]