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

Comparing deliantra/server/server/main.C (file contents):
Revision 1.92 by root, Tue Mar 6 03:06:00 2007 UTC vs.
Revision 1.98 by root, Sat Apr 21 23:03:54 2007 UTC

237 * is needed after the players have been updated. 237 * is needed after the players have been updated.
238 */ 238 */
239static void 239static void
240process_players1 () 240process_players1 ()
241{ 241{
242 int flag;
243
244 /* Basically, we keep looping until all the players have done their actions. */ 242 /* Basically, we keep looping until all the players have done their actions. */
245 for (flag = 1; flag != 0;) 243 for (int flag = 1; flag != 0;)
246 { 244 {
247 flag = 0; 245 flag = 0;
248 for_all_players (pl) 246 for_all_players (pl)
249 { 247 {
250 pl->refcnt_chk (); 248 pl->refcnt_chk ();
329 LOG (llevError, "BUG: process_events(): Free object on list\n"); 327 LOG (llevError, "BUG: process_events(): Free object on list\n");
330 op->set_speed (0); 328 op->set_speed (0);
331 continue; 329 continue;
332 } 330 }
333 331
334 /* I've seen occasional crashes due to this - the object is removed,
335 * and thus the map it points to (last map it was on) may be bogus
336 * The real bug is to try to find out the cause of this - someone
337 * is probably calling remove_ob without either an insert_ob or
338 * free_object afterwards, leaving an object dangling. But I'd
339 * rather log this and continue on instead of crashing.
340 * Don't remove players - when a player quits, the object is in
341 * sort of a limbo, of removed, but something we want to keep
342 * around.
343 */
344 if (QUERY_FLAG (op, FLAG_REMOVED) && op->type != PLAYER && op->map && op->map->in_memory != MAP_IN_MEMORY)
345 {
346 LOG (llevError, "BUG: process_events(): Removed object on list\n");
347 char *dump = dump_object (op);
348 LOG (llevError, dump);
349 free (dump);
350 op->destroy ();
351 continue;
352 }
353
354 if (!op->has_active_speed ()) 332 if (!op->has_active_speed ())
355 { 333 {
356 LOG (llevError, "BUG: process_events(): Object %s has no speed (%f), " 334 LOG (llevError, "BUG: process_events(): Object %s has no speed (%f), "
357 "but is on active list\n", op->debug_desc (), op->speed); 335 "but is on active list\n", op->debug_desc (), op->speed);
358 op->set_speed (0); 336 op->set_speed (0);
359 continue; 337 continue;
360 } 338 }
361 339
362 if (op->map == NULL && op->env == NULL && op->name && op->type != MAP) 340 if (op->flag [FLAG_REMOVED])
363 { 341 {
364 LOG (llevError, "BUG: process_events(): Object without map or " 342 LOG (llevError, "BUG: process_events(): removed object is on active list: %s\n",
365 "inventory is on active list: %s (%d)\n", &op->name, op->count); 343 op->debug_desc ());
366 op->set_speed (0); 344 op->set_speed (0);
367 continue; 345 continue;
368 } 346 }
369 347
370 /* Animate the object. Bug or feature that anim_speed 348 /* Animate the object. Bug or feature that anim_speed
549 * done on the same tick, but that will happen very infrequently 527 * done on the same tick, but that will happen very infrequently
550 * 528 *
551 * I also think this code makes it easier to see how often we really are 529 * I also think this code makes it easier to see how often we really are
552 * doing the various things. 530 * doing the various things.
553 */ 531 */
554
555extern unsigned long todtick;
556
557void 532void
558do_specials (void) 533do_specials (void)
559{ 534{
560 if (!(pticks % PTICKS_PER_CLOCK)) 535 if (!(pticks % TICKS_PER_HOUR))
561 tick_the_clock (); 536 adjust_daylight ();
562 537
563 if (!(pticks % 7)) 538 if (!(pticks % 7))
564 shstr::gc (); 539 shstr::gc ();
565 540
566 if (!(pticks % 2503)) 541 if (!(pticks % 2503))
649{ 624{
650 settings.argc = argc; 625 settings.argc = argc;
651 settings.argv = argv; 626 settings.argv = argv;
652 627
653 init (argc, argv); 628 init (argc, argv);
654 init_environ ();
655 629
656 initPlugins (); 630 initPlugins ();
657 631
658 for (;;) 632 for (;;)
659 cfperl_main (); 633 cfperl_main ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines