Fix mouse_call_sv_safe() again
[gitmo/Mouse.git] / xs-src / MouseAccessor.xs
index fd4cf68..27be7b9 100644 (file)
@@ -144,14 +144,22 @@ mouse_attr_set(pTHX_ SV* const self, MAGIC* const mg, SV* value){
         SV* const trigger = mcall0s(MOUSE_mg_attribute(mg), "trigger");
         dSP;
 
+        /* NOTE: triggers can remove value, so
+                 value must be copied here,
+                 revealed by Net::Google::DataAPI (DANJOU).
+         */
+        value = sv_mortalcopy(value);
+
         PUSHMARK(SP);
         EXTEND(SP, 2);
         PUSHs(self);
         PUSHs(value);
 
         PUTBACK;
-        call_sv(trigger, G_VOID | G_DISCARD);
+        call_sv_safe(trigger, G_VOID | G_DISCARD);
         /* need not SPAGAIN */
+
+        assert(SvTYPE(value) != SVTYPEMASK);
     }
 
     PUSH_VALUE(value, flags);