Race condition when processing multiple combat event at the same time
Kyrios0 opened this issue · 2 comments
WoW Version
Retail
TellMeWhen Version
11.1.4
Describe the bug
I'm a TellMeWhen user and I really appreciate this powerful addon — it's been incredibly useful for tracking various buffs.
I’ve run into an issue that I hope you can help me understand. I'm using Event Icons for Pack Leader BM Hunter to detect when specific buffs are removed via combat log events. Let’s call the buffs X and Y, and their corresponding icons A and B. I also have a Meta Icon that displays whichever of A or B was triggered most recently (based on the largest timer).
This generally works well, but I’ve noticed a problem when both buffs (X and Y) are removed simultaneously — for example, within the same GCD. In those cases, both A and B are triggered in the same moment, yet A consistently shows in the Meta Icon, even though I added a condition to A to ensure it only triggers if B was not triggered within the last 1 second (so I added a timer to B which will reset to 0 for combat event triggered each time, and add condition Timer(B) > 1.0 to A).
From this behavior, it seems like B is processed before A, so by the time A evaluates its condition, B's timer is already running — even though they technically fired at the same time.
Is this expected behavior due to how TMW processes icon updates within a frame? And is there a recommended way to handle simultaneous events like this, where I need one icon to suppress itself if another event occurred in the same moment? Since these icons are cyclic depends on each other, for example: A -> B -> C -> A so I can not easily give them some priority by adjust the timer.
Thanks again for maintaining such a great addon — I’d really appreciate any insight you can offer!
Export Strings
^1^T^SGUID^STMW:group:1eMXFog2YZaW ^SPoint^T ^Sy^F-5746767173779456 ^f-46^Sx ^F8960291232546816^f-46 ^Spoint^STOPLEFT ^SrelativePoint^STOPLEFT ^t^SEnabledSpecs^T ^N254^b ^N255^b ^t^SIcons^T ^N1^T ^SSort^N1 ^SType^Smeta ^SIcons^T ^N1^STMW:icon:1eMY5f743zKE ^N2^STMW:icon:1eMXFog9YF82 ^N3^STMW:icon:1eMY5f7C89G4 ^t^SEnabled^B ^t^N2^T ^SType^Scleu ^SCLEUDur^N21300 ^SGUID^STMW:icon:1eMY5f743zKE ^SName^S471878 ^SShowTimerText^B ^SConditions^T ^N1^T ^SType^STIMER ^SOperator^S>= ^SLevel^F6305039478318695 ^f-52^SName ^Szhu^t ^N2^T ^SType^SCOUNTER ^SAndOr^SOR ^SName^Slong ^t^Sn^N2 ^t^SEnabled^B ^SEvents^T ^N1^T ^STimerOperation^Srestart ^SType^STimer ^SCounter^Slong ^SEvent^SOnCLEUEvent ^t^N2^T ^SType^SCounter ^SCounter^Slong ^SEvent^SOnCLEUEvent ^t^N3^T ^SType^SCounter ^SCounterOperation^S= ^SEvent^SOnFinish ^SCounterAmt^N0 ^SCounter^Slong ^t^N4^T ^SType^SCounter ^SCounter^Slong ^SCounterAmt^N0 ^SCounterOperation^S= ^SEvent^SOnEventsRestored ^t^Sn^N4 ^t^SSettingsPerView^T ^Sicon^T ^STexts^T ^N1^S[Counter("long")] ^N2^S[Timer("long"):TMWFormatDuration] ^t^t^t^SOnlyIfConditions^B ^SCustomTex^S472324 ^SStates^T ^N102^T ^SAlpha^N0.5 ^t^t^SDestUnit^Splayer ^SCLEUEvents^T ^SSPELL_AURA_REMOVED^B ^t^t^N3^T ^SType^Scleu ^SCLEUDur^N21300 ^SGUID^STMW:icon:1eMXFog9YF82 ^SName^S472324 ^SShowTimerText^B ^SConditions^T ^N1^T ^SType^STIMER ^SOperator^S>= ^SLevel^F6305039478318695 ^f-52^SName ^Sxiong^t ^N2^T ^SType^SCOUNTER ^SAndOr^SOR ^SName^Szhu ^t^Sn^N2 ^t^SEnabled^B ^SEvents^T ^N1^T ^STimerOperation^Srestart ^SType^STimer ^SCounter^Szhu ^SEvent^SOnCLEUEvent ^t^N2^T ^SType^SCounter ^SCounter^Szhu ^SEvent^SOnCLEUEvent ^t^N3^T ^SType^SCounter ^SCounterOperation^S= ^SEvent^SOnFinish ^SCounterAmt^N0 ^SCounter^Szhu ^t^N4^T ^SType^SCounter ^SCounter^Szhu ^SCounterAmt^N0 ^SCounterOperation^S= ^SEvent^SOnEventsRestored ^t^Sn^N4 ^t^SSettingsPerView^T ^Sicon^T ^STexts^T ^N1^S[Counter("zhu")] ^N2^S[Timer("zhu"):TMWFormatDuration] ^t^t^t^SDestUnit^Splayer ^SCustomTex^S472325 ^SStates^T ^N102^T ^SAlpha^N0.5 ^t^t^SOnlyIfConditions^B ^SCLEUEvents^T ^SSPELL_AURA_REMOVED^B ^t^t^N4^T ^SType^Scleu ^SConditions^T ^N1^T ^SType^STIMER ^SOperator^S>= ^SLevel^F6305039478318695 ^f-52^SName ^Slong^t ^N2^T ^SType^SCOUNTER ^SAndOr^SOR ^SName^Sxiong ^t^Sn^N2 ^t^SCLEUDur^N21300 ^SShowTimerText^B ^SName^S472325 ^SEvents^T ^N1^T ^STimerOperation^Srestart ^SType^STimer ^SCounter^Sxiong ^SEvent^SOnCLEUEvent ^t^N2^T ^SType^SCounter ^SCounter^Sxiong ^SEvent^SOnCLEUEvent ^t^N3^T ^SType^SCounter ^SCounterOperation^S= ^SEvent^SOnFinish ^SCounterAmt^N0 ^SCounter^Sxiong ^t^N4^T ^SType^SCounter ^SCounter^Sxiong ^SCounterAmt^N0 ^SCounterOperation^S= ^SEvent^SOnEventsRestored ^t^Sn^N4 ^t^SEnabled^B ^SGUID^STMW:icon:1eMY5f7C89G4 ^SSettingsPerView^T ^Sicon^T ^STexts^T ^N1^S[Counter("xiong")] ^N2^S[Timer("xiong"):TMWFormatDuration] ^t^t^t^SOnlyIfConditions^B ^SCustomTex^S471878 ^SStates^T ^N102^T ^SAlpha^N0.5 ^t^t^SDestUnit^Splayer ^SCLEUEvents^T ^SSPELL_AURA_REMOVED^B ^t^t^t^SName^SPL ^t^N11010401^S~`~| ^Sgroup^N10 ^^
I see. Thank you for explaination!
This sounds like an out-of-scope issue. I will close the issue then.