ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/plugins/cfperl/cfperl.xs
(Generate patch)

Comparing deliantra/server/plugins/cfperl/cfperl.xs (file contents):
Revision 1.17 by root, Wed Feb 8 05:22:41 2006 UTC vs.
Revision 1.18 by root, Wed Feb 8 06:15:13 2006 UTC

80// all objects no longer referenced and empty are 80// all objects no longer referenced and empty are
81// eligible for destruction. 81// eligible for destruction.
82void 82void
83clean_obj_cache () 83clean_obj_cache ()
84{ 84{
85 return; //D // killing neko-san gives me an unreferenced scalar 85 static int count;
86
87 if (++count & 7)
88 return;
89
86 int todo = 10; 90 int todo = 1000;
87 do 91 do
88 { 92 {
89 I32 klen; 93 I32 klen;
90 char *key; 94 char *key;
91 HE *he = hv_iternext (obj_cache); 95 HE *he = hv_iternext (obj_cache);
92 96
93 if (he) 97 if (he)
94 { 98 {
95 SV *sv = hv_iterval (obj_cache, he); 99 SV *sv = hv_iterval (obj_cache, he);
96 100
97 // emopty and unreferened? nuke it 101 // empty and unreferenced? nuke it
98 if (SvREFCNT (sv) == 1 && SvREFCNT (SvRV (sv)) == 1 && !HvFILL ((HV *)(SvRV (sv)))) 102 if (SvREFCNT (sv) == 1 && SvREFCNT (SvRV (sv)) == 1 && !HvFILL ((HV *)(SvRV (sv))))
99 { 103 {
100 hv_delete (obj_cache, HeKEY (he), HeKLEN (he), G_DISCARD); 104 hv_delete (obj_cache, HeKEY (he), HeKLEN (he), G_DISCARD);
101 todo++; 105 todo++;
102 } 106 }
130 134
131 if (he) 135 if (he)
132 sv = *he; 136 sv = *he;
133 else 137 else
134 { 138 {
135 return sv; //D
136 sv = newSVptr (ptr, klass); 139 sv = newSVptr (ptr, klass);
137 hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0); 140 hv_store (obj_cache, (char *)&ptr, sizeof (ptr), sv, 0);
138 } 141 }
139 142
140 return newSVsv (sv); 143 return newSVsv (sv);
519 522
520 va_end (args); 523 va_end (args);
521 524
522 if (context.event_code == EVENT_FREE_OB) 525 if (context.event_code == EVENT_FREE_OB)
523 { 526 {
524 SV *sv = hv_delete (obj_cache, (char *)&context.activator, sizeof (object *), 0); 527 SV **svp = hv_fetch (obj_cache, (char *)&context.activator, sizeof (void *), 0);
525 528
526 if (sv) 529 if (svp)
527 {
528 clearSVptr (sv); 530 clearSVptr (*svp);
529 SvREFCNT_dec (sv);
530 }
531 } 531 }
532 else 532 else
533 inject_event ("cf::inject_global_event", &context); 533 inject_event ("cf::inject_global_event", &context);
534 534
535 rv = context.returnvalue; 535 rv = context.returnvalue;
1271 1271
1272object *cf_insert_ob_in_ob (object *ob, object *where) 1272object *cf_insert_ob_in_ob (object *ob, object *where)
1273 1273
1274object *get_nearest_player (object *ob) 1274object *get_nearest_player (object *ob)
1275 ALIAS: nearest_player = 0 1275 ALIAS: nearest_player = 0
1276 PREINIT:
1277 extern object *get_nearest_player (object *);
1276 1278
1277void rangevector (object *ob, object *other, int flags = 0) 1279void rangevector (object *ob, object *other, int flags = 0)
1278 PROTOTYPE: $$;$ 1280 PROTOTYPE: $$;$
1279 PPCODE: 1281 PPCODE:
1280{ 1282{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines