Author: stas Date: Sun Dec 26 15:05:39 2004 New Revision: 123369 URL: http://svn.apache.org/viewcvs?view=rev&rev=123369 Log: make sure that we add the pools dependency only for non-native pools
Modified: perl/modperl/trunk/Changes perl/modperl/trunk/xs/APR/Pool/APR__Pool.h perl/modperl/trunk/xs/modperl_xs_util.h Modified: perl/modperl/trunk/Changes Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/Changes?view=diff&rev=123369&p1=perl/modperl/trunk/Changes&r1=123368&p2=perl/modperl/trunk/Changes&r2=123369 ============================================================================== --- perl/modperl/trunk/Changes (original) +++ perl/modperl/trunk/Changes Sun Dec 26 15:05:39 2004 @@ -17,7 +17,8 @@ used it corrupted. the solution is to make the newly created objects refer to the underlying object via magic attachment. only objects using objects that have DESTROY are effected. This concerns some of -the methods accepting the APR::Pool object. [Stas] +the methods accepting the custom APR::Pool object (not native pools +like $r->pool). [Stas] Adjusted: - APR::Brigade: new - APR::Finfo: stat Modified: perl/modperl/trunk/xs/APR/Pool/APR__Pool.h Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/APR/Pool/APR__Pool.h?view=diff&rev=123369&p1=perl/modperl/trunk/xs/APR/Pool/APR__Pool.h&r1=123368&p2=perl/modperl/trunk/xs/APR/Pool/APR__Pool.h&r2=123369 ============================================================================== --- perl/modperl/trunk/xs/APR/Pool/APR__Pool.h (original) +++ perl/modperl/trunk/xs/APR/Pool/APR__Pool.h Sun Dec 26 15:05:39 2004 @@ -43,7 +43,7 @@ APR_OPTIONAL_FN_TYPE(modperl_interp_unselect) *modperl_opt_interp_unselect; #endif -#define MP_APR_POOL_SV_HAS_OWNERSHIP(sv) (mg_find(sv, PERL_MAGIC_ext) != NULL) +#define MP_APR_POOL_SV_HAS_OWNERSHIP(sv) mpxs_pool_is_custom(sv) #ifdef USE_ITHREADS Modified: perl/modperl/trunk/xs/modperl_xs_util.h Url: http://svn.apache.org/viewcvs/perl/modperl/trunk/xs/modperl_xs_util.h?view=diff&rev=123369&p1=perl/modperl/trunk/xs/modperl_xs_util.h&r1=123368&p2=perl/modperl/trunk/xs/modperl_xs_util.h&r2=123369 ============================================================================== --- perl/modperl/trunk/xs/modperl_xs_util.h (original) +++ perl/modperl/trunk/xs/modperl_xs_util.h Sun Dec 26 15:05:39 2004 @@ -104,20 +104,32 @@ MARK++; \ } +/* custom pool objects created by modperl users (not internal like + * r->pool) are marked by magic in SvRV(obj) + */ +#define mpxs_pool_is_custom(pool) (mg_find(pool, PERL_MAGIC_ext) != NULL) + /* several methods need to ensure that the pool that they take as an * object doesn't go out of scope before the object that they return, * since if this happens, the data contained in the later object * becomes corrupted. this macro is used in various xs files where * it's needed */ #if ((PERL_REVISION == 5) && (PERL_VERSION >= 8)) - /* modperl_hash_tie already attached another _ext magic under - * 5.8+, so must use sv_magicext to have two magics with the - * type */ -#define mpxs_add_pool_magic(obj, pool_obj) \ + /* sometimes the added magic is the second one (e.g. in case when + * the object is generated by modperl_hash_tie, so under 5.8+ + * need to use sv_magicext, since sv_magicext does only one magic + * of the same type at 5.8+ */ +#define mpxs_add_pool_magic_doit(obj, pool_obj) \ sv_magicext(SvRV(obj), pool_obj, PERL_MAGIC_ext, NULL, Nullch, -1) #else -#define mpxs_add_pool_magic(obj, pool_obj) \ +#define mpxs_add_pool_magic_doit(obj, pool_obj) \ sv_magic(SvRV(obj), pool_obj, PERL_MAGIC_ext, Nullch, -1) #endif + +/* add dependency magic only for custom pools */ +#define mpxs_add_pool_magic(obj, pool_obj) \ + if (mpxs_pool_is_custom(SvRV(pool_obj))) { \ + mpxs_add_pool_magic_doit(obj, pool_obj); \ + } #endif /* MODPERL_XS_H */