HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Leaking Groups but how?

03-25-2007, 01:23 PM#1
n13astra
Now i know this is still partly GUI converted JASS but when i run the map with grimoire loaded, i get these debug errors.

Total groups created: xxx
Total undestroyed groups: xxx
GetUnitsInRangeOfLocMatching with xxx active groups
<init> with 6 active groups
InitGlobals with 5 active groups.

Now, i dont see how the hell its leaking but it is. I can watch the memory usage climb. Am i destroying the groups correctly?

Help!

Collapse JASS:
function Trig_Untitled_Trigger_001_Func001Func001Func003002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func003002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func003002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func003002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func003002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func003002003002 takes nothing returns boolean
    return ( IsPlayerAlly(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(udg_Control_Points[GetForLoopIndexA()])) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func003002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func003002003001(), Trig_Untitled_Trigger_001_Func001Func001Func003002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func004002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func004002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func004002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func004002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func004002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func004002003002 takes nothing returns boolean
    return ( IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(udg_Control_Points[GetForLoopIndexA()])) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func004002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func004002003001(), Trig_Untitled_Trigger_001_Func001Func001Func004002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func005002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func005002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func005002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func005002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func005002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func005002003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), udg_Players_Team[1]) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func005002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func005002003001(), Trig_Untitled_Trigger_001_Func001Func001Func005002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func006002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func006002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func006002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func006002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func006002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func006002003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), udg_Players_Team[2]) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func006002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func006002003001(), Trig_Untitled_Trigger_001_Func001Func001Func006002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), udg_Players_Team[2]) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003001(), Trig_Untitled_Trigger_001_Func001Func001Func007Func001002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_HERO) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001002 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001001(), Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003002 takes nothing returns boolean
    return ( IsPlayerInForce(GetOwningPlayer(GetFilterUnit()), udg_Players_Team[1]) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003001(), Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001001 takes nothing returns boolean
    return ( IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002001 takes nothing returns boolean
    return ( IsUnitAliveBJ(GetFilterUnit()) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002002 takes nothing returns boolean
    return ( GetOwningPlayer(GetFilterUnit()) != Player(PLAYER_NEUTRAL_PASSIVE) )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002001(), Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001001(), Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001002 takes nothing returns boolean
    return ( IsUnitAlly(GetFilterUnit(), GetOwningPlayer(udg_Control_Points[GetForLoopIndexA()])) == true )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001001(), Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002001 takes nothing returns boolean
    return ( GetUnitTypeId(GetFilterUnit()) == 'h001' )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002002 takes nothing returns boolean
    return ( GetUnitTypeId(GetFilterUnit()) == 'h000' )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002 takes nothing returns boolean
    return GetBooleanOr( Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002001(), Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003 takes nothing returns boolean
    return GetBooleanAnd( Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003001(), Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003002() )
endfunction

function Trig_Untitled_Trigger_001_Func001Func002Func001Func004Func001Func006A takes nothing returns nothing
    call SetUnitOwner( GetEnumUnit(), ConvertedPlayer(( 10 + udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GroupPickRandomUnit(udg_Temp_Unit_Group_2)))] )), true )
endfunction

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    local integer I = 1
    local integer TIME = 10
    local group G1
    local group G2
    local group G3 = null
    local location L = null
    
    loop
        exitwhen I > 6
        set L = GetUnitLoc(udg_Control_Points[i])
        if ( GetOwningPlayer(udg_Control_Points[i]) == Player(PLAYER_NEUTRAL_PASSIVE) ) then
            set TIME = 15
            set G1 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func005002003))
            set G2 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func006002003))
            if ( CountUnitsInGroup(G1) > CountUnitsInGroup(G2) ) then
                call DestroyGroup(G1)
                set G1 = G2
                call DestroyGroup(G2)
                set G2 = GetUnitsInRangeOfLocMatching(300.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func007Func002002003))
            endif
        else
            set G1 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func003002003))
            set G2 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func004002003))
        endif
        if ( CountUnitsInGroup(G1) > CountUnitsInGroup(G2) ) then
            if ( GetUnitUserData(udg_Control_Points[i]) > 0 ) then
                call SetUnitUserData( udg_Control_Points[i], ( GetUnitUserData(udg_Control_Points[i]) - 1 ) )
            endif
        else
            if ( ( CountUnitsInGroup(G2) > CountUnitsInGroup(G1) ) or ( ( GetOwningPlayer(GetFilterUnit()) == Player(PLAYER_NEUTRAL_PASSIVE) ) and ( CountUnitsInGroup(G1) > CountUnitsInGroup(G2) ) ) ) then
                set G3 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func002Func001Func003002003))
                if ( CountUnitsInGroup(G3) == 0 ) then
                    if ( GetUnitUserData(udg_Control_Points[i]) < TIME ) then
                        call CreateTextTagUnitBJ( ( "Control in: |c00ffff00" + ( I2S(( TIME - GetUnitUserData(udg_Control_Points[i]) )) + "|r Seconds" ) ), udg_Control_Points[i], 50.00, 10, 100, 100, 100, 0 )
                        call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
                        call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 1.00 )
                        call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 0.25 )
                        if ( GetUnitUserData(udg_Control_Points[i]) == 0 ) then
                            call PlaySoundBJ( gg_snd_AirRaid_Siren1 )
                            call DisplayTextToForce( GetPlayersEnemies(GetOwningPlayer(GroupPickRandomUnit(G1))), "|cffff0000An enemy unit is trying to take over a control point.|r" )
                            call DisplayTextToForce( GetPlayersAllies(GetOwningPlayer(GroupPickRandomUnit(G2))), "|cff00ff00An allied player is trying to take over a control point.|r" )
                            call PingMinimapLocForForceEx( udg_Players, L, 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )
                        endif
                        call SetUnitUserData( udg_Control_Points[i], ( GetUnitUserData(udg_Control_Points[i]) + 1 ) )
                    else
                        call SetUnitOwner( udg_Control_Points[i], ConvertedPlayer(( 10 + udg_Team_Of_Player[GetConvertedPlayerId(GetOwningPlayer(GroupPickRandomUnit(G2)))] )), true )
                        call DisplayTextToForce( GetPlayersEnemies(GetOwningPlayer(GroupPickRandomUnit(G1))), "|cffff0000An enemy unit has taken over a control point.|r" )
                        call DisplayTextToForce( GetPlayersAllies(GetOwningPlayer(GroupPickRandomUnit(G2))), "|cff00ff00An allied player has taken over a control point.|r" )
                        set udg_Control_Points_Captures[GetConvertedPlayerId(GetOwningPlayer(GroupPickRandomUnit(G2)))] = ( udg_Control_Points_Captures[GetConvertedPlayerId(GetOwningPlayer(GroupPickRandomUnit(G2)))] + 1 )
                        call SetUnitUserData( udg_Control_Points[i], 0 )
                        call ForGroupBJ( G3, function Trig_Untitled_Trigger_001_Func001Func002Func001Func004Func001Func006A )
                        call PingMinimapLocForForceEx( udg_Players, L, 0.80, bj_MINIMAPPINGSTYLE_SIMPLE, 64.00, 64.00, 64.00 )
                        call AddSpecialEffectLocBJ( L, "Abilities\\Spells\\Other\\Charm\\CharmTarget.mdl" )
                        call DestroyEffectBJ( GetLastCreatedEffectBJ() )
                    endif
                endif
                call DestroyGroup(G3)
            else
                if ( ( CountUnitsInGroup(G1) == 0 ) and ( CountUnitsInGroup(G2) == 0 ) and ( GetUnitUserData(udg_Control_Points[i]) > 0 ) ) then
                    call SetUnitUserData( udg_Control_Points[i], ( GetUnitUserData(udg_Control_Points[i]) - 1 ) )
                endif
            endif
        endif
        call DestroyGroup(G1)
        call DestroyGroup(G2)
        call RemoveLocation(L)
        set I = I + 1
    endloop

//    call TriggerExecute( gg_trg_Base_Capture )

    if(udg_Show_Tips == TRUE) then
        call TriggerExecute( gg_trg_Random_Tips )
    endif

    call TriggerExecute( gg_trg_Player_Income_and_Upgrade )

    call TriggerExecute( gg_trg_Clock )
    
    set L = null
    set G1 = null
    set G2 = null
    set G3 = null
endfunction

//===========================================================================
function InitTrig_Untitled_Trigger_001 takes nothing returns nothing
    set gg_trg_Untitled_Trigger_001 = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Untitled_Trigger_001, 1.00 )
    call TriggerAddAction( gg_trg_Untitled_Trigger_001, function Trig_Untitled_Trigger_001_Actions )
endfunction

03-25-2007, 01:28 PM#2
blu_da_noob
Quote:
Originally Posted by n13astra
Collapse JASS:
//removed GUI condition crap
//my god that was ugly
function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
    local integer I = 1
    local integer TIME = 10
    local group G1
    local group G2
    local group G3 = null
    local location L = null
    
    loop
        exitwhen I > 6
        set L = GetUnitLoc(udg_Control_Points[i])
        if ( GetOwningPlayer(udg_Control_Points[i]) == Player(PLAYER_NEUTRAL_PASSIVE) ) then
            set TIME = 15
            set G1 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func005002003))
            set G2 = GetUnitsInRangeOfLocMatching(500.00, L, Condition(function Trig_Untitled_Trigger_001_Func001Func001Func006002003))
            if ( CountUnitsInGroup(G1) > CountUnitsInGroup(G2) ) then
                set G1 = G2 //in doing this, you lose the reference to G1 which you are then unable to destroy

That was the only obvious thing I saw in a quick look-through. To fix that just put call DestroyGroup(G1) before the set G1 = G2.
03-25-2007, 01:33 PM#3
n13astra
ah cool, it got rid of it, thanks!

Edit: Nope, it didnt... I've added the modified code and it's still coming up.

Any other ideas?
03-25-2007, 02:08 PM#4
blu_da_noob
Another quick browse (hurr) doesn't reveal any more group leaks to me. However:
Collapse JASS:
         call DisplayTextToForce( GetPlayersEnemies(GetOwningPlayer(GroupPickRandomUnit(G1))), "|cffff0000An enemy unit is trying to take over a control point.|r" )
                            call DisplayTextToForce( GetPlayersAllies(GetOwningPlayer(GroupPickRandomUnit(G2))), "|cff00ff00An allied player is trying to take over a control point.|r" )
There are a couple of places where you have stuff like that. The GetPlayerEnemies/Allies forces leak.
03-26-2007, 12:12 AM#5
n13astra
Ah yes forgot about the Forces.

Thanks for you help!