Changeset 351


Ignore:
Timestamp:
Feb 4, 2011, 12:42:22 AM (10 years ago)
Author:
sam
Message:

More aggressive ticker panic mode.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/ticker.cpp

    r347 r351  
    9696{
    9797#if !FINAL_RELEASE
     98    if (!entity)
     99    {
     100        fprintf(stderr, "ERROR: refing NULL entity\n");
     101        return;
     102    }
    98103    if (entity->destroy)
    99104        fprintf(stderr, "ERROR: refing entity scheduled for destruction\n");
     
    122127{
    123128#if !FINAL_RELEASE
     129    if (!entity)
     130    {
     131        fprintf(stderr, "ERROR: dereferencing NULL entity\n");
     132        return 0;
     133    }
    124134    if (entity->ref <= 0)
    125135        fprintf(stderr, "ERROR: dereferencing unreferenced entity\n");
     
    163173    if (data->quit && !((data->frame - data->quitframe) % data->quitdelay))
    164174    {
    165         Entity *entity = NULL;
    166         for (int i = 0; i < Entity::ALLGROUP_END && !entity; i++)
    167             entity = data->list[i];
    168         if (entity && entity->ref)
    169         {
    170 #if !FINAL_RELEASE
    171             if (!data->panic)
    172                 fprintf(stderr, "ERROR: %i entities stuck after %i frames\n",
    173                         data->nentities, data->quitdelay);
    174             data->panic = 1;
    175 #endif
    176             entity->ref--;
    177             data->quitdelay = data->quitdelay > 1 ? data->quitdelay / 2 : 1;
    178         }
     175        int n = 0;
     176        data->panic = 2 * (data->panic + 1);
     177
     178        for (int i = 0; i < Entity::ALLGROUP_END && n < data->panic; i++)
     179        for (Entity *e = data->list[i]; e && n < data->panic; e = e->gamenext)
     180            if (e->ref)
     181            {
     182                e->ref--;
     183                n++;
     184            }
     185
     186#if !FINAL_RELEASE
     187        if (n)
     188            fprintf(stderr, "ERROR: %i entities stuck after %i frames, "
     189                    "poked %i\n", data->nentities, data->quitdelay, n);
     190#endif
     191
     192        data->quitdelay = data->quitdelay > 1 ? data->quitdelay / 2 : 1;
    179193    }
    180194
Note: See TracChangeset for help on using the changeset viewer.