]> git.vpit.fr Git - perl/modules/Variable-Magic.git/blobdiff - Magic.xs
Reorder a bit the wizard duplication logic to silence a cast warning
[perl/modules/Variable-Magic.git] / Magic.xs
index 41bf22dcd5068d655e6a3ba0d7139b64b39b9d17..985b37ff1771e3fbc3984062f2963e105b138700 100644 (file)
--- a/Magic.xs
+++ b/Magic.xs
@@ -670,13 +670,13 @@ STATIC int vmg_svt_clear(pTHX_ SV *sv, MAGIC *mg) {
 }
 
 STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) {
- SV *wiz = (SV *) mg->mg_ptr;
  const MGWIZ *w;
  unsigned int flags;
  int ret = 0;
 
- /* This may happen in global destruction */
- if (SvTYPE(wiz) == SVTYPEMASK)
+ /* Don't even bother if we are in global destruction - the wizard is prisoner
+  * of circular references and we are way beyond user realm */
+ if (PL_dirty)
   return 0;
 
  w = SV2MGWIZ(mg->mg_ptr);
@@ -1086,8 +1086,11 @@ CODE:
    STRLEN len;
    char *sig = HePV(key, len);
    SV *sv;
+   const MGWIZ *w;
    MAGIC *mg;
-   sv = MGWIZ2SV(vmg_wizard_clone(SV2MGWIZ(HeVAL(key))));
+   w  = SV2MGWIZ(HeVAL(key));
+   w  = vmg_wizard_clone(w);
+   sv = MGWIZ2SV(w);
    mg = sv_magicext(sv, NULL, PERL_MAGIC_ext, &vmg_wizard_vtbl, NULL, 0);
    mg->mg_private = SIG_WIZ;
    SvREADONLY_on(sv);