• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • Create a faction for Warcraft 3 and enter Hive's 19th Techtree Contest: Co-Op Commanders! Click here to enter!
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 21st Texturing Contest: Upgrade is now concluded, time to vote for your favourite set of icons! Click here to vote!

Multiboard Set Item Leak?

Status
Not open for further replies.
Level 11
Joined
Jun 30, 2008
Messages
580
I have isolated that the MultiboardSetItemValue is causing my handles to go up, even though I destroy the multiboard later on, the handles stay the same. This function is called whenever a player presses the DOWN arrow key. And they will use it quite a bit x 10 players. And each press causes the handles to go up from 20 to 100 handles.

Is there a way around this?

JASS:
private function NextAtt takes nothing returns nothing
        local integer pID = GetPlayerId(GetTriggerPlayer())
        local CharDat dat = LoadInteger(CD, pID, 1)
        call MultiboardSetItemValue(MultiboardGetItem(dat.Instructions, dat.Attribute+2, 0), " ")
        call MultiboardReleaseItem(MultiboardGetItem(dat.Instructions, dat.Attribute+2, 0))
        if (dat.Attribute < MAXATT) then
            set dat.Attribute = dat.Attribute+1
        else
            set dat.Attribute = 1
        endif
        if (dat.Attribute==5) then
            if (dat.name == false) then
                set dat.name = true
            endif
        endif
        call MultiboardSetItemValue(MultiboardGetItem(dat.Instructions, dat.Attribute+2, 0), ARROW)
        call MultiboardReleaseItem(MultiboardGetItem(dat.Instructions, dat.Attribute+2, 0))
        set dat.name = false
    endfunction
 
Level 26
Joined
Aug 18, 2009
Messages
4,099
You should just destroy it with MultiboardReleaseItem or recycle it. Do MultiboardGetItem once in the beginning for a cell and then store it globally or save it in a local variable til end of the function/thread to finally destroy it (do not forget to nullify the variable afterwards).
 
Level 11
Joined
Jun 30, 2008
Messages
580
This is what I got:
JASS:
    method setmbitem takes nothing returns nothing
        set .mbitem = MultiboardGetItem(.Instructions, 0, .Attribute+2)
    endmethod

And I call the method after the multiboard is created. It is still not working.
Also, the first thing I tried was a local variable and nulling it. And it still leaked.
(And yes I used
JASS:
MultiboardReleaseItem
)
 
Status
Not open for further replies.
Top