--- deliantra/server/plugins/cfperl/cfperl.xs 2006/02/08 07:14:56 1.19 +++ deliantra/server/plugins/cfperl/cfperl.xs 2006/02/09 01:15:25 1.20 @@ -114,12 +114,14 @@ static SV * newSVptr (void *ptr, const char *klass) { + SV *sv; + if (!ptr) return &PL_sv_undef; - HV *hv = newHV (); - sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0); - return sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); + sv = newSV (0); + sv_magic (sv, 0, PERL_MAGIC_ext, (char *)ptr, 0); + return sv_bless (newRV_noinc (sv), gv_stashpv (klass, 1)); } static SV * @@ -136,7 +138,9 @@ sv = *he; else { - sv = newSVptr (ptr, klass); + HV *hv = newHV (); + sv_magic ((SV *)hv, 0, PERL_MAGIC_ext, (char *)ptr, 0); + sv = sv_bless (newRV_noinc ((SV *)hv), gv_stashpv (klass, 1)); hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0); } @@ -524,10 +528,10 @@ if (context.event_code == EVENT_FREE_OB) { - SV **svp = hv_fetch (obj_cache, (char *)&context.activator, sizeof (void *), 0); + SV *sv = hv_delete (obj_cache, (char *)&context.activator, sizeof (void *), 0); - if (svp) - clearSVptr (*svp); + if (sv) + clearSVptr (sv); } else inject_event ("cf::inject_global_event", &context);