--- deliantra/server/server/cfperl.xs 2006/08/28 16:52:51 1.23 +++ deliantra/server/server/cfperl.xs 2006/08/29 05:29:48 1.24 @@ -1607,7 +1607,8 @@ int invoke (int event, ...) CODE: if (KLASS_OF (event) != KLASS_GLOBAL) croak ("event class must be GLOBAL"); - AV *av = (AV *)sv_2mortal ((SV *)newAV ()); for (int i = 1; i < items; i++) av_push (av, ST (i)); + AV *av = (AV *)sv_2mortal ((SV *)newAV ()); + for (int i = 1; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); RETVAL = INVOKE_((event_type)event, ARG_AV (av)); OUTPUT: RETVAL @@ -1655,7 +1656,8 @@ int invoke (object *op, int event, ...) CODE: if (KLASS_OF (event) != KLASS_OBJECT) croak ("event class must be OBJECT"); - AV *av = (AV *)sv_2mortal ((SV *)newAV ()); for (int i = 2; i < items; i++) av_push (av, ST (i)); + AV *av = (AV *)sv_2mortal ((SV *)newAV ()); + for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); RETVAL = INVOKE_((event_type)event, ARG_OBJECT (op), ARG_AV (av)); OUTPUT: RETVAL @@ -1955,7 +1957,8 @@ int invoke (player *pl, int event, ...) CODE: if (KLASS_OF (event) != KLASS_PLAYER) croak ("event class must be PLAYER"); - AV *av = (AV *)sv_2mortal ((SV *)newAV ()); for (int i = 2; i < items; i++) av_push (av, ST (i)); + AV *av = (AV *)sv_2mortal ((SV *)newAV ()); + for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); RETVAL = INVOKE_((event_type)event, ARG_PLAYER (pl), ARG_AV (av)); OUTPUT: RETVAL @@ -2095,7 +2098,8 @@ int invoke (mapstruct *map, int event, ...) CODE: if (KLASS_OF (event) != KLASS_MAP) croak ("event class must be MAP"); - AV *av = (AV *)sv_2mortal ((SV *)newAV ()); for (int i = 2; i < items; i++) av_push (av, ST (i)); + AV *av = (AV *)sv_2mortal ((SV *)newAV ()); + for (int i = 2; i < items; i++) av_push (av, SvREFCNT_inc (ST (i))); RETVAL = INVOKE_((event_type)event, ARG_MAP (map), ARG_AV (av)); OUTPUT: RETVAL