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.196 by root, Fri Apr 27 02:23:07 2007 UTC vs.
Revision 1.197 by root, Fri Apr 27 03:38:33 2007 UTC

169 { 169 {
170 SvREFCNT_dec (cb); 170 SvREFCNT_dec (cb);
171 cb = 0; 171 cb = 0;
172 } 172 }
173 173
174 if (self)
175 sever_self ();
176
177 mortals.push_back (this); 174 mortals.push_back (this);
178} 175}
179 176
180void 177void
181attachable::destroy () 178attachable::destroy ()
197 if (i >= mortals.size ()) 194 if (i >= mortals.size ())
198 { 195 {
199 i = 0; 196 i = 0;
200 197
201 if (mortals.size () > 1000) 198 if (mortals.size () > 1000)
202 fprintf (stderr, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ()); 199 LOG (llevInfo, "mortal queue size (%d) exceeds 1000.\n", (int)mortals.size ());
203 200
204 break; 201 break;
205 } 202 }
206 203
207 attachable *obj = mortals [i]; 204 attachable *obj = mortals [i];
208 205
209 obj->refcnt_chk (); // unborrow from perl, if necessary 206#if 0
207 if (obj->self)//D make this an assert later
208 {
209 LOG (llevError, "check_mortals: object '%s' still has self\n", typeid (obj).name ());
210 obj->sever_self ();
211 }
212#endif
210 213
211 if (obj->refcnt || obj->self) 214 if (obj->refcnt_cnt ())
212 { 215 {
213 ++i; // further delay freeing 216 ++i; // further delay freeing
214 217
215 if (!(i & 0x3ff)) 218 if (!(i & 0x3ff))
216 break; 219 break;
217 } 220 }
218 else 221 else
219 { 222 {
220 mortals.erase (i); 223 mortals.erase (i);
224 obj->sever_self ();
221 delete obj; 225 delete obj;
222 } 226 }
223 } 227 }
224} 228}
225 229

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines