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

Comparing deliantra/server/server/cfperl.xs (file contents):
Revision 1.144 by root, Fri Jan 19 15:55:27 2007 UTC vs.
Revision 1.151 by root, Tue Jan 23 01:29:51 2007 UTC

164} 164}
165 165
166void 166void
167attachable::check_mortals () 167attachable::check_mortals ()
168{ 168{
169 for (int i = 0; i < mortals.size (); ) 169 static int i = 0;
170
171 for (;;)
170 { 172 {
173 if (i >= mortals.size ())
174 {
175 i = 0;
176
177 if (mortals.size () > 1000)
178 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", mortals.size ());
179
180 break;
181 }
182
171 attachable *obj = mortals [i]; 183 attachable *obj = mortals [i];
172 184
173 obj->refcnt_chk (); // unborrow from perl, if necessary 185 obj->refcnt_chk (); // unborrow from perl, if necessary
174 186
187 //if (obj->refcnt > 0 || obj->self)
175 if (obj->refcnt || obj->self) 188 if (obj->refcnt || obj->self)
176 { 189 {
177#if 0 190//printf ("%p rc %d\n", obj, obj->refcnt_cnt ());//D
178 if (mortals.size() > 5)fprintf (stderr, "%d delaying %d:%p:%s %d (self %p:%d)\n", time(0),i, obj, typeid (*obj).name (),
179 obj->refcnt, obj->self, obj->self ? SvREFCNT(obj->self): - 1);//D
180#endif
181
182 ++i; // further delay freeing 191 ++i; // further delay freeing
192
193 if (!(i & 0x3ff))
194 break;
183 }//D 195 }
184 else 196 else
185 { 197 {
186 //Dfprintf (stderr, "deleteing %d:%p:%s\n", i, obj,typeid (*obj).name ());//D
187 mortals.erase (i); 198 mortals.erase (i);
188 delete obj; 199 delete obj;
189 } 200 }
190 } 201 }
191} 202}
313inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); } 324inline SV *to_sv (living * v) { return newSVptr (v, stash_cf_living_wrap); }
314 325
315inline SV *to_sv (object & v) { return to_sv (&v); } 326inline SV *to_sv (object & v) { return to_sv (&v); }
316inline SV *to_sv (living & v) { return to_sv (&v); } 327inline SV *to_sv (living & v) { return to_sv (&v); }
317 328
318inline SV *to_sv (New_Face * v) { return to_sv (v->name); } 329inline SV *to_sv (facetile * v) { return to_sv (v->name); }
319inline SV *to_sv (treasurelist * v) { return to_sv (v->name); } 330inline SV *to_sv (treasurelist * v) { return to_sv (v->name); }
320 331
321inline SV *to_sv (UUID v) 332inline SV *to_sv (UUID v)
322{ 333{
323 char buf[128]; 334 char buf[128];
348inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); } 359inline void sv_to (SV *sv, attachable * &v) { v = (attachable *)SvPTR_ornull (sv, "cf::attachable"); }
349inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); } 360inline void sv_to (SV *sv, partylist * &v) { v = (partylist *)SvPTR_ornull (sv, "cf::party"); }
350inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); } 361inline void sv_to (SV *sv, region * &v) { v = (region *)SvPTR_ornull (sv, "cf::region"); }
351inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); } 362inline void sv_to (SV *sv, living * &v) { v = (living *)SvPTR_ornull (sv, "cf::living"); }
352 363
353inline void sv_to (SV *sv, New_Face * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; } 364inline void sv_to (SV *sv, facetile * &v) { v = &new_faces[FindFace (SvPV_nolen (sv), 0)]; }
354inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); } 365inline void sv_to (SV *sv, treasurelist * &v) { v = find_treasurelist (SvPV_nolen (sv)); }
355 366
356template<class T> 367template<class T>
357inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; } 368inline void sv_to (SV *sv, refptr<T> &v) { T *tmp; sv_to (sv, tmp); v = tmp; }
358 369
895void 906void
896iw::alloc () 907iw::alloc ()
897{ 908{
898 pe = GEventAPI->new_idle (0, 0); 909 pe = GEventAPI->new_idle (0, 0);
899 910
911 WaREENTRANT_off (pe);
900 pe->base.callback = (void *)iw_dispatch; 912 pe->base.callback = (void *)iw_dispatch;
901 pe->base.ext_data = (void *)this; 913 pe->base.ext_data = (void *)this;
902} 914}
903 915
904static void iow_dispatch (pe_event *ev) 916static void iow_dispatch (pe_event *ev)
910void 922void
911iow::alloc () 923iow::alloc ()
912{ 924{
913 pe = GEventAPI->new_io (0, 0); 925 pe = GEventAPI->new_io (0, 0);
914 926
927 WaREENTRANT_off (pe);
915 pe->base.callback = (void *)iow_dispatch; 928 pe->base.callback = (void *)iow_dispatch;
916 pe->base.ext_data = (void *)this; 929 pe->base.ext_data = (void *)this;
917 930
918 pe->fd = -1; 931 pe->fd = -1;
919 pe->poll = 0; 932 pe->poll = 0;
1248 const_iv (FLAG_IS_WATER) 1261 const_iv (FLAG_IS_WATER)
1249 const_iv (FLAG_CONTENT_ON_GEN) 1262 const_iv (FLAG_CONTENT_ON_GEN)
1250 const_iv (FLAG_IS_A_TEMPLATE) 1263 const_iv (FLAG_IS_A_TEMPLATE)
1251 const_iv (FLAG_IS_BUILDABLE) 1264 const_iv (FLAG_IS_BUILDABLE)
1252 const_iv (FLAG_DESTROY_ON_DEATH) 1265 const_iv (FLAG_DESTROY_ON_DEATH)
1253 const_iv (FLAG_NO_SAVE) 1266 const_iv (FLAG_NO_MAP_SAVE)
1254 1267
1255 const_iv (NDI_BLACK) 1268 const_iv (NDI_BLACK)
1256 const_iv (NDI_WHITE) 1269 const_iv (NDI_WHITE)
1257 const_iv (NDI_NAVY) 1270 const_iv (NDI_NAVY)
1258 const_iv (NDI_RED) 1271 const_iv (NDI_RED)
1443 const_iv (ATNR_BLIND) 1456 const_iv (ATNR_BLIND)
1444 const_iv (ATNR_INTERNAL) 1457 const_iv (ATNR_INTERNAL)
1445 const_iv (ATNR_LIFE_STEALING) 1458 const_iv (ATNR_LIFE_STEALING)
1446 const_iv (ATNR_DISEASE) 1459 const_iv (ATNR_DISEASE)
1447 1460
1448 const_iv (MAP_FLUSH)
1449 const_iv (MAP_PLAYER_UNIQUE)
1450 const_iv (MAP_BLOCK)
1451 const_iv (MAP_STYLE)
1452 const_iv (MAP_OVERLAY)
1453
1454 const_iv (MAP_IN_MEMORY) 1461 const_iv (MAP_IN_MEMORY)
1455 const_iv (MAP_SWAPPED) 1462 const_iv (MAP_SWAPPED)
1456 const_iv (MAP_LOADING) 1463 const_iv (MAP_LOADING)
1457 const_iv (MAP_SAVING) 1464 const_iv (MAP_SAVING)
1458 1465
1624void fork_abort (char *cause = "cf::fork_abort") 1631void fork_abort (char *cause = "cf::fork_abort")
1625 1632
1626void cleanup (const char *cause, bool make_core = false) 1633void cleanup (const char *cause, bool make_core = false)
1627 1634
1628void emergency_save () 1635void emergency_save ()
1636
1637UV sv_2watcher (SV *w)
1638 CODE:
1639 RETVAL = (UV)GEventAPI->sv_2watcher (w);
1640 OUTPUT:
1641 RETVAL
1629 1642
1630void _exit (int status = 0) 1643void _exit (int status = 0)
1631 1644
1632#if _POSIX_MEMLOCK 1645#if _POSIX_MEMLOCK
1633 1646
2221 char *origin_map,\ 2234 char *origin_map,\
2222 char *final_map,\ 2235 char *final_map,\
2223 char *exitstyle,\ 2236 char *exitstyle,\
2224 char *this_map,\ 2237 char *this_map,\
2225 char *exit_on_final_map,\ 2238 char *exit_on_final_map,\
2226 int Xsize,\ 2239 int xsize,\
2227 int Ysize,\ 2240 int ysize,\
2228 int expand2x,\ 2241 int expand2x,\
2229 int layoutoptions1,\ 2242 int layoutoptions1,\
2230 int layoutoptions2,\ 2243 int layoutoptions2,\
2231 int layoutoptions3,\ 2244 int layoutoptions3,\
2232 int symmetry,\ 2245 int symmetry,\
2237 int dungeon_depth,\ 2250 int dungeon_depth,\
2238 int decoroptions,\ 2251 int decoroptions,\
2239 int orientation,\ 2252 int orientation,\
2240 int origin_y,\ 2253 int origin_y,\
2241 int origin_x,\ 2254 int origin_x,\
2242 int random_seed,\ 2255 U32 random_seed,\
2243 val64 total_map_hp,\ 2256 val64 total_map_hp,\
2244 int map_layout_style,\ 2257 int map_layout_style,\
2245 int treasureoptions,\ 2258 int treasureoptions,\
2246 int symmetry_used,\ 2259 int symmetry_used,\
2247 region *region,\ 2260 region *region,\
2263 assign (rmp.exit_on_final_map, exit_on_final_map); 2276 assign (rmp.exit_on_final_map, exit_on_final_map);
2264 2277
2265 rmp.origin_map = origin_map; 2278 rmp.origin_map = origin_map;
2266 rmp.final_map = final_map; 2279 rmp.final_map = final_map;
2267 rmp.this_map = this_map; 2280 rmp.this_map = this_map;
2268 rmp.Xsize = Xsize; 2281 rmp.xsize = xsize;
2269 rmp.Ysize = Ysize; 2282 rmp.ysize = ysize;
2270 rmp.expand2x = expand2x; 2283 rmp.expand2x = expand2x;
2271 rmp.layoutoptions1 = layoutoptions1; 2284 rmp.layoutoptions1 = layoutoptions1;
2272 rmp.layoutoptions2 = layoutoptions2; 2285 rmp.layoutoptions2 = layoutoptions2;
2273 rmp.layoutoptions3 = layoutoptions3; 2286 rmp.layoutoptions3 = layoutoptions3;
2274 rmp.symmetry = symmetry; 2287 rmp.symmetry = symmetry;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines