+ } else if (!in_eval) {
+ if (dsv) {
+ /* We are about to croak() while dsv is being destroyed. Try to clean up
+ * things a bit. */
+ MAGIC *mg = SvMAGIC(dsv);
+ SvREFCNT_dec((SV *) mg->mg_ptr);
+ /* mg->mg_obj may not be refcounted if the data constructor returned the
+ * variable itself. */
+ if (mg->mg_flags & MGf_REFCOUNTED)
+ SvREFCNT_dec(mg->mg_obj);
+ SvMAGIC_set(dsv, mg->mg_moremagic);
+ Safefree(mg);
+ mg_magical(dsv);
+ SvREFCNT_dec(dsv);
+ }