Unit reference counting debuging made optional.
This commit is contained in:
parent
e0c1cd311d
commit
8112418ed4
10 changed files with 116 additions and 11 deletions
|
@ -67,7 +67,9 @@ global void HandleActionDemolish(Unit* unit)
|
|||
if( goal ) {
|
||||
if( goal->Destroyed ) {
|
||||
DebugLevel0Fn("Destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
if( !--goal->Refs ) {
|
||||
ReleaseUnit(goal);
|
||||
}
|
||||
|
@ -77,9 +79,13 @@ global void HandleActionDemolish(Unit* unit)
|
|||
return;
|
||||
} else if( goal->Removed || !goal->HP
|
||||
|| goal->Command.Action==UnitActionDie ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
--goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=goal=NoUnitP;
|
||||
// FIXME: perhaps I should choose an alternative
|
||||
unit->Command.Action=UnitActionStill;
|
||||
|
@ -113,9 +119,13 @@ global void HandleActionDemolish(Unit* unit)
|
|||
case 1:
|
||||
goal=unit->Command.Data.Move.Goal;
|
||||
if( goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
--goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
|
||||
|
|
|
@ -256,7 +256,9 @@ local int ReturnWithWood(Unit* unit)
|
|||
if( destu ) {
|
||||
if( destu->Destroyed ) {
|
||||
DebugLevel0Fn("Destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
if( !--destu->Refs ) {
|
||||
ReleaseUnit(destu);
|
||||
}
|
||||
|
@ -266,18 +268,26 @@ local int ReturnWithWood(Unit* unit)
|
|||
return 0;
|
||||
} else if( destu->Removed || !destu->HP
|
||||
|| destu->Command.Action==UnitActionDie ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
--destu->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
// FIXME: perhaps I should choose an alternative
|
||||
unit->Command.Action=UnitActionStill;
|
||||
return 0;
|
||||
}
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
--destu->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
}
|
||||
|
||||
x=unit->Command.Data.Move.DX;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name action_hauloil.c - The haul oil action. */
|
||||
//
|
||||
// (c) Copyright 1998-2000 by Lutz Sammer
|
||||
// (c) Copyright 1998-2001 by Lutz Sammer
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -62,7 +62,9 @@ local int MoveToOilWell(Unit* unit)
|
|||
|
||||
well=unit->Command.Data.Move.Goal;
|
||||
if( well && (well->Destroyed || !well->HP) ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !well->Refs );
|
||||
#endif
|
||||
if( !--well->Refs ) {
|
||||
ReleaseUnit(well);
|
||||
}
|
||||
|
@ -84,9 +86,13 @@ local int MoveToOilWell(Unit* unit)
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !well->Refs );
|
||||
#endif
|
||||
--well->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !well->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
|
||||
//
|
||||
|
@ -255,7 +261,9 @@ local int MoveToOilDepot(Unit* unit)
|
|||
|
||||
depot=unit->Command.Data.Move.Goal;
|
||||
if( depot && (depot->Destroyed || !depot->HP) ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !depot->Refs );
|
||||
#endif
|
||||
if( !--depot->Refs ) {
|
||||
ReleaseUnit(depot);
|
||||
}
|
||||
|
@ -275,9 +283,13 @@ local int MoveToOilDepot(Unit* unit)
|
|||
|
||||
DebugCheck( MapDistanceToUnit(unit->X,unit->Y,depot)!=1 );
|
||||
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !depot->Refs );
|
||||
#endif
|
||||
--depot->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !depot->Refs );
|
||||
#endif
|
||||
// FIXME: don't work unit->Command.Data.Move.Goal=NoUnitP;
|
||||
|
||||
RemoveUnit(unit);
|
||||
|
@ -389,9 +401,13 @@ global void HandleActionHaulOil(Unit* unit)
|
|||
unit->Command.Action=UnitActionStill;
|
||||
unit->SubAction=0;
|
||||
if( unit->Command.Data.Move.Goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
--unit->Command.Data.Move.Goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
}
|
||||
|
@ -418,9 +434,13 @@ global void HandleActionHaulOil(Unit* unit)
|
|||
unit->Command.Action=UnitActionStill;
|
||||
unit->SubAction=0;
|
||||
if( unit->Command.Data.Move.Goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
--unit->Command.Data.Move.Goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name action_minegold.c - The mine gold action. */
|
||||
//
|
||||
// (c) Copyright 1998-2000 by Lutz Sammer
|
||||
// (c) Copyright 1998-2001 by Lutz Sammer
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -59,7 +59,9 @@ local int MoveToGoldMine(Unit* unit)
|
|||
destu=unit->Command.Data.Move.Goal;
|
||||
if( destu && (destu->Destroyed || !destu->HP) ) {
|
||||
DebugLevel1Fn("WAIT after goldmine destroyed %d\n",unit->Wait);
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
if( !--destu->Refs ) {
|
||||
ReleaseUnit(destu);
|
||||
}
|
||||
|
@ -78,9 +80,13 @@ local int MoveToGoldMine(Unit* unit)
|
|||
//
|
||||
// FIXME: hmmm... we're in trouble here.
|
||||
// we should check if there's still some gold left in the mine instead.
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
--destu->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
|
||||
destu->Command.Data.GoldMine.Active++;
|
||||
|
@ -234,7 +240,9 @@ local int MoveToGoldDeposit(Unit* unit)
|
|||
|
||||
destu=unit->Command.Data.Move.Goal;
|
||||
if( destu && (destu->Destroyed || !destu->HP) ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
if( !--destu->Refs ) {
|
||||
ReleaseUnit(destu);
|
||||
}
|
||||
|
@ -254,9 +262,13 @@ local int MoveToGoldDeposit(Unit* unit)
|
|||
return -1;
|
||||
}
|
||||
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
--destu->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !destu->Refs );
|
||||
#endif
|
||||
|
||||
RemoveUnit(unit);
|
||||
unit->X=destu->X;
|
||||
|
@ -375,9 +387,13 @@ global void HandleActionMineGold(Unit* unit)
|
|||
unit->Command.Action=UnitActionStill;
|
||||
unit->SubAction=0;
|
||||
if( unit->Command.Data.Move.Goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
--unit->Command.Data.Move.Goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
}
|
||||
|
@ -409,9 +425,13 @@ global void HandleActionMineGold(Unit* unit)
|
|||
unit->Command.Action=UnitActionStill;
|
||||
unit->SubAction=0;
|
||||
if( unit->Command.Data.Move.Goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
--unit->Command.Data.Move.Goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name action_move.c - The move action. */
|
||||
//
|
||||
// (c) Copyright 1998,2000 by Lutz Sammer
|
||||
// (c) Copyright 1998,2001 by Lutz Sammer
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -82,7 +82,9 @@ local int ActionMoveGeneric(Unit* unit,const Animation* move)
|
|||
// FIXME: Can't choose a better target here!
|
||||
if( goal->Destroyed ) {
|
||||
DebugLevel0Fn("destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
if( !--goal->Refs ) {
|
||||
ReleaseUnit(goal);
|
||||
}
|
||||
|
@ -90,9 +92,13 @@ local int ActionMoveGeneric(Unit* unit,const Animation* move)
|
|||
} else if( goal->Removed ||
|
||||
!goal->HP || goal->Command.Action==UnitActionDie ) {
|
||||
DebugLevel0Fn("killed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
--goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=goal=NoUnitP;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name action_repair.c - The repair action. */
|
||||
//
|
||||
// (c) Copyright 1999,2000 by Vladi Shabanski
|
||||
// (c) Copyright 1999-2001 by Vladi Shabanski
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -172,7 +172,9 @@ global int HandleActionRepair(Unit* unit)
|
|||
if( goal ) {
|
||||
if( goal->Destroyed ) {
|
||||
DebugLevel0Fn("destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
if( !--goal->Refs ) {
|
||||
ReleaseUnit(goal);
|
||||
}
|
||||
|
@ -183,9 +185,13 @@ global int HandleActionRepair(Unit* unit)
|
|||
} else if( !goal->HP ||
|
||||
goal->Command.Action==UnitActionDie ) {
|
||||
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
--goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
// FIXME: should I clear this here?
|
||||
unit->Command.Data.Move.Goal=goal=NULL;
|
||||
unit->Command.Data.Move.DX=goal->X;
|
||||
|
@ -202,9 +208,13 @@ global int HandleActionRepair(Unit* unit)
|
|||
} else if( err<0 ) {
|
||||
DebugCheck( unit->Command.Action!=UnitActionStill );
|
||||
if( goal ) { // release reference
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
goal->Refs--;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
return 1;
|
||||
|
@ -229,7 +239,9 @@ global int HandleActionRepair(Unit* unit)
|
|||
if( goal ) {
|
||||
if( goal->Destroyed ) {
|
||||
DebugLevel0Fn("destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
if( !--goal->Refs ) {
|
||||
ReleaseUnit(goal);
|
||||
}
|
||||
|
@ -254,9 +266,13 @@ global int HandleActionRepair(Unit* unit)
|
|||
//
|
||||
if( !goal || goal->HP >= goal->Stats->HitPoints ) {
|
||||
if( goal ) { // release reference
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
goal->Refs--;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NULL;
|
||||
}
|
||||
unit->Command.Action=UnitActionStill;
|
||||
|
|
|
@ -9,11 +9,10 @@
|
|||
// FreeCraft - A free fantasy real time strategy game engine
|
||||
//
|
||||
/**@name action_spellcast.c - The spell cast action. */
|
||||
/*
|
||||
** (c) Copyright 1998-2000 by Vladi Belperchinov-Shabanski
|
||||
**
|
||||
** $Id$
|
||||
*/
|
||||
//
|
||||
// (c) Copyright 1998-2001 by Vladi Belperchinov-Shabanski
|
||||
//
|
||||
// $Id$
|
||||
|
||||
/*
|
||||
** This is inherited from action_attack.c, actually spell casting will
|
||||
|
@ -162,7 +161,13 @@ global void HandleActionSpellCast(Unit* unit)
|
|||
unit->SubAction=0;
|
||||
unit->Wait = 1;
|
||||
if ( unit->Command.Data.Move.Goal )
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal->Refs--;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name action_still.c - The stand still action. */
|
||||
//
|
||||
// (c) Copyright 1998,2000 by Lutz Sammer
|
||||
// (c) Copyright 1998,2000,2001 by Lutz Sammer
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -163,7 +163,9 @@ global void ActionStillGeneric(Unit* unit,int ground)
|
|||
if( temp && temp->Destroyed ) {
|
||||
DebugLevel3Fn(" destroyed unit %Zd #%d\n"
|
||||
,UnitNumber(temp),temp->Refs);
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !temp->Refs );
|
||||
#endif
|
||||
if( !--temp->Refs ) {
|
||||
ReleaseUnit(temp);
|
||||
}
|
||||
|
@ -174,9 +176,13 @@ global void ActionStillGeneric(Unit* unit,int ground)
|
|||
if( temp ) {
|
||||
DebugLevel3Fn(" old unit %Zd #%d\n"
|
||||
,UnitNumber(temp),temp->Refs);
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !temp->Refs );
|
||||
#endif
|
||||
temp->Refs--;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !temp->Refs );
|
||||
#endif
|
||||
}
|
||||
unit->Command.Data.Move.Goal=goal;
|
||||
goal->Refs++;
|
||||
|
@ -194,9 +200,13 @@ global void ActionStillGeneric(Unit* unit,int ground)
|
|||
|
||||
if( unit->SubAction ) { // was attacking.
|
||||
if( (temp=unit->Command.Data.Move.Goal) ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !temp->Refs );
|
||||
#endif
|
||||
temp->Refs--;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !temp->Refs );
|
||||
#endif
|
||||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
}
|
||||
unit->SubAction=unit->State=0;
|
||||
|
|
|
@ -84,15 +84,21 @@ local void LeaveTransporter(Unit* unit)
|
|||
unit->Command.Data.Move.Goal=NoUnitP;
|
||||
if( goal->Destroyed ) {
|
||||
DebugLevel0Fn("destroyed unit\n");
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
if( !--goal->Refs ) {
|
||||
ReleaseUnit(goal);
|
||||
}
|
||||
return;
|
||||
}
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
--goal->Refs;
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !goal->Refs );
|
||||
#endif
|
||||
for( i=0; i<MAX_UNITS_ONBOARD; ++i ) {
|
||||
if( goal==unit->OnBoard[i] ) {
|
||||
goal->X=unit->X;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
//
|
||||
/**@name actions.c - The actions. */
|
||||
//
|
||||
// (c) Copyright 1998,2000 by Lutz Sammer
|
||||
// (c) Copyright 1998,2000,2001 by Lutz Sammer
|
||||
//
|
||||
// $Id$
|
||||
|
||||
|
@ -119,7 +119,9 @@ local void HandleUnitAction(Unit* unit)
|
|||
// Release pending references.
|
||||
//
|
||||
if( unit->Command.Data.Move.Goal ) {
|
||||
#ifdef REFS_DEBUG
|
||||
DebugCheck( !unit->Command.Data.Move.Goal->Refs-- );
|
||||
#endif
|
||||
if !--unit->Command.Data.Move.Goal->Refs ) {
|
||||
ReleaseUnit(unit->Command.Data.Move.Goal);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue