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

Comparing deliantra/server/server/freezethaw.C (file contents):
Revision 1.24 by root, Wed Aug 1 20:07:06 2007 UTC vs.
Revision 1.25 by root, Tue Sep 4 05:43:22 2007 UTC

145 SvCUR_set (text, len); 145 SvCUR_set (text, len);
146 memcpy (SvPVX (text), sv_, len); 146 memcpy (SvPVX (text), sv_, len);
147 memcpy (SvEND (text), eof, sizeof (eof)); // just to be sure 147 memcpy (SvEND (text), eof, sizeof (eof)); // just to be sure
148 148
149 line = SvPVX (text); 149 line = SvPVX (text);
150 next ();
150 } 151 }
151 } 152 }
152 153
153 CALL_END; 154 CALL_END;
154 } 155 }
159{ 160{
160 av = perlav; 161 av = perlav;
161 text = newSVpv (data, 0); 162 text = newSVpv (data, 0);
162 sv_catpv (text, thawer_eof); 163 sv_catpv (text, thawer_eof);
163 line = SvPVbyte_nolen (text); 164 line = SvPVbyte_nolen (text);
165 next ();
164} 166}
165 167
166void 168void
167object_thawer::get (attachable *obj, int oid) 169object_thawer::get (attachable *obj, int oid)
168{ 170{
218 220
219object_thawer::~object_thawer () 221object_thawer::~object_thawer ()
220{ 222{
221 if (text) SvREFCNT_dec (text); 223 if (text) SvREFCNT_dec (text);
222 if (av) SvREFCNT_dec (av); 224 if (av) SvREFCNT_dec (av);
225
226 resolve_delayed_derefs (false);
223 227
224 free ((void *)name); 228 free ((void *)name);
225} 229}
226 230
227//TODO: remove 231//TODO: remove
383 387
384 next (); 388 next ();
385} 389}
386 390
387void 391void
392object_thawer::skip_block ()
393{
394 while (kw != KW_ERROR && kw != KW_EOF)
395 {
396 keyword w = kw;
397 skip ();
398 if (w == KW_end)
399 break;
400 }
401}
402
403void
388object_thawer::get_ml (keyword kend, shstr &sh) 404object_thawer::get_ml (keyword kend, shstr &sh)
389{ 405{
390 char kw[128]; 406 char kw[128];
391 407
392 int klen = keyword_len [kend]; 408 int klen = keyword_len [kend];
459 while (*p); 475 while (*p);
460 476
461 return negate ? -val : val; 477 return negate ? -val : val;
462} 478}
463 479
480void
481object_thawer::delayed_deref (attachable *op, object_ptr &ptr, const char *ref)
482{
483 op->refcnt_inc ();
484 delayed_ref r = { op, &ptr, ref ? strdup (ref) : 0 };
485 delrefs.push_back (r);
486 ptr = 0;
487}
488
489void
490object_thawer::resolve_delayed_derefs (bool deref)
491{
492 while (!delrefs.empty ())
493 {
494 delayed_ref r = delrefs.back ();
495 delrefs.pop_back ();
496
497 if (deref)
498 *r.ptr = object::deref (r.ref);
499
500 free ((void *)r.ref);
501 r.op->refcnt_dec ();
502 }
503}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines