Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WA Options stuck on loading #4967

Open
2 tasks done
Causese opened this issue Mar 30, 2024 · 1 comment · May be fixed by #5083
Open
2 tasks done

WA Options stuck on loading #4967

Causese opened this issue Mar 30, 2024 · 1 comment · May be fixed by #5083
Labels
🐛 Bug This is a problem with WeakAuras.

Comments

@Causese
Copy link
Contributor

Causese commented Mar 30, 2024

Is there an existing issue for this?

  • I have searched the existing open and closed issues.

Description

WA occasionally gets stuck on loading after using /wa. I'd say this didn't happen prior to 10.2.6

no idea if colorpicker plus can cause this

included a screenshot

WeakAuras Version

5.12.5

World of Warcraft Flavor

Retail (Default)

World of Warcraft Region

EU

Tested with only WeakAuras

  • Yes

Lua Error

1x ...s/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown-Items.lua:17: script ran too long
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown-Items.lua"]:17: in function <...s/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua:12>
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown-Items.lua"]:17: in function <...s/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua:12>
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown-Items.lua"]:96: in function `SetPullout'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown.lua"]:177: in function `AddItem'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown.lua"]:570: in function <...ue/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown.lua:560>
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIWidget-DropDown.lua"]:610: in function `SetList'
[string "@Masque/Libs/AceConfig-3.0-3/AceConfigDialog-3.0-86/AceConfigDialog-3.0.lua"]:1279: in function <...nfig-3.0/AceConfigDialog-3.0/AceConfigDialog-3.0.lua:1110>
[string "@Masque/Libs/AceConfig-3.0-3/AceConfigDialog-3.0-86/AceConfigDialog-3.0.lua"]:1639: in function `FeedGroup'
[string "@Masque/Libs/AceConfig-3.0-3/AceConfigDialog-3.0-86/AceConfigDialog-3.0.lua"]:1919: in function `Open'
[string "@WeakAurasOptions/OptionsFrames/OptionsFrame.lua"]:1001: in function `FillOptions'
[string "@WeakAurasOptions/OptionsFrames/OptionsFrame.lua"]:998: in function <...dOns/WeakAurasOptions/OptionsFrames/OptionsFrame.lua:996>
[string "=[C]"]: ?
[string "@Masque/Libs/AceGUI-3.0-41/AceGUI-3.0.lua"]:66: in function <Masque/Libs/AceGUI-3.0/AceGUI-3.0.lua:64>
[string "@Masque/Libs/AceGUI-3.0-41/AceGUI-3.0.lua"]:300: in function `Fire'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIContainer-TabGroup.lua"]:342: in function `SelectTab'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIContainer-TabGroup.lua"]:200: in function <...Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua:197>

Locals:
parent = AceGUI30DropDownItem312 {
 0 = <userdata>
 sndButton = Button {
 }
 PixelSnapDisabled = true
 obj = <table> {
 }
}
i = 1
child = Button {
 0 = <userdata>
 sound = FontString {
 }
 PixelSnapDisabled = true
}
(*temporary) = <function> defined @Masque/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua:12
(*temporary) = Button {
 0 = <userdata>
 sound = FontString {
 }
 PixelSnapDisabled = true
}
(*temporary) = "script ran too long"
select = <function> defined =[C]:-1
fixlevels = <function> defined @Masque/Libs/AceGUI-3.0/widgets/AceGUIWidget-DropDown-Items.lua:12
1x Masque/Libs/AceGUI-3.0-41/AceGUI-3.0.lua:66: script ran too long
[string "@Masque/Libs/AceGUI-3.0-41/AceGUI-3.0.lua"]:66: in function <Masque/Libs/AceGUI-3.0/AceGUI-3.0.lua:64>
[string "@Masque/Libs/AceGUI-3.0-41/AceGUI-3.0.lua"]:300: in function `Fire'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIContainer-TabGroup.lua"]:342: in function `SelectTab'
[string "@Masque/Libs/AceGUI-3.0-41/widgets/AceGUIContainer-TabGroup.lua"]:200: in function <...Libs/AceGUI-3.0/widgets/AceGUIContainer-TabGroup.lua:197>

Locals:
func = <function> defined @WeakAurasOptions/OptionsFrames/OptionsFrame.lua:996
(*temporary) = false
(*temporary) = nil
(*temporary) = "script ran too long"
xpcall = <function> defined =[C]:-1
errorhandler = <function> defined @Masque/Libs/AceGUI-3.0/AceGUI-3.0.lua:60
1x WeakAuras/WeakAuras.lua:4339: script ran too long
[string "@WeakAuras/WeakAuras.lua"]:4339: in function <WeakAuras/WeakAuras.lua:4321>

Locals:
self = Frame {
 0 = <userdata>
}
elapsed = 0.023000
start = 383241952.209600
hasData = true
(for generator) = <function> defined =[C]:-1
(for state) = <table> {
 LayoutDisplayButtons2 = <no value>
}
(for control) = "LayoutDisplayButtons2"
name = "LayoutDisplayButtons2"
func = <no value>
ok = false
msg = "WeakAuras/Libs/LibSerialize/LibSerialize.lua:1230: script ran too long"
(*temporary) = false
(*temporary) = "WeakAuras/Libs/LibSerialize/LibSerialize.lua:1230: script ran too long"
(*temporary) = false
(*temporary) = nil
(*temporary) = nil
(*temporary) = "script ran too long"
debugprofilestop = <function> defined =[C]:-1
dynFrame = <table> {
 RemoveAction = <function> defined @WeakAuras/WeakAuras.lua:4309
 AddAction = <function> defined @WeakAuras/WeakAuras.lua:4296
 frame = Frame {
 }
 update = <table> {
 }
 size = 1
}
debugstack = <function> defined =[C]:-1

Reproduction Steps

can't reproduce reliably

Last Good Version

No response

Screenshots

Export String

No response
WeakAuras.zip

@Causese Causese added the 🐛 Bug This is a problem with WeakAuras. label Mar 30, 2024
@github-actions github-actions bot added the ⏱ Awaiting Response This ticket hasn't been triaged yet. label Mar 30, 2024
@emptyrivers emptyrivers removed the ⏱ Awaiting Response This ticket hasn't been triaged yet. label May 15, 2024
@emptyrivers
Copy link
Contributor

Hi I didn't forget about this, I was just avoiding thinking about it. Some notes:

  1. First timeout happened during construction of a dropdown list - specifically with a list that contained an item which had a Button a few levels down the parent chain, which itself had a child FontString with parentKey = sound. That's almost certainly a media selector in either Actions, Conditions, or Custom Options tabs.
  2. Second error happened pretty early in the call stack during FillOptions, specifically during the a SelectTab invocation.
  3. Last error occurred during LayoutDisplayButtons2 thread, where execution terminates on a LibSerialize:Deserialize(...) invocation. We only invoke that particular library during a) ActivateAuraEnvironment, if aura has custom saved data, or b) when unpacking an import string. Very unlikely it was the latter, given reporter doesn't mention trying to import anything. The former happens whenever any aura function runs, and in particular can be invoked many times during ResumeAllDynamicGroups, and indeed there are four auras in attached savedvariables which make use of custom saved data, at least one of which (a member of this import: https://wago.io/M+Timer) is parented to a dynamic group.

All evidence seems to point to, 'normal execution was interrupted unexpectedly by Blizzard'. Normally, this only happens after 19 contiguous seconds of execution, which seems unlikely in this case, because a) we already chunk our execution to avoid exactly that problem, and b) I think we would get a lot of complaints if we were routinely freezing the game for 10+ seconds when any user opens options.

There is one case where that 19 second timeout is conspicuously reduced. During combat the limit is something closer to 200 milliseconds. Normally, we refuse to open the options window during combat, but it turns out we don't stop thread execution if combat starts, so it's possible that a user with a) a lot of auras that use a lot of features that b) starts combat or gets put into combat by their party members while c) options is still building, could trigger a similar fail like this (though the exact stack traces are unlikely to be identical, due to the nature of script timeouts).

emptyrivers added a commit to emptyrivers/WeakAuras2 that referenced this issue May 15, 2024
nothing that we put into dynFrame threads is meant for in-combat execution anyways, so to avoid random unexpectedly short timeouts, pause execution if combat starts, and resume after combat ends.

There's potential for WeakAuras to be 'broken' during that combat session (due to dynamic groups being Pause()'d), but we probably couldn't have unbroken it given that ResumeAllDynamicGroups is too costly to call during combat lockdown without risking a timeout.

Fixes WeakAuras#4967 (or at least, reduces its likelihood)
emptyrivers added a commit to emptyrivers/WeakAuras2 that referenced this issue May 15, 2024
nothing that we put into dynFrame threads is meant for in-combat execution anyways, so to avoid random unexpectedly short timeouts, pause execution if combat starts, and resume after combat ends.

There's potential for WeakAuras to be 'broken' during that combat session (due to dynamic groups being Pause()'d), but we probably couldn't have unbroken it given that ResumeAllDynamicGroups is too costly to call during combat lockdown without risking a timeout.

Fixes WeakAuras#4967 (or at least, reduces its likelihood)
emptyrivers added a commit to emptyrivers/WeakAuras2 that referenced this issue May 15, 2024
nothing that we put into dynFrame threads is meant for in-combat execution anyways, so to avoid random unexpectedly short timeouts, pause execution if combat starts, and resume after combat ends.

There's potential for WeakAuras to be 'broken' during that combat session (due to dynamic groups being Pause()'d), but we probably couldn't have unbroken it given that ResumeAllDynamicGroups is too costly to call during combat lockdown without risking a timeout.

Fixes WeakAuras#4967 (or at least, reduces its likelihood)
emptyrivers added a commit to emptyrivers/WeakAuras2 that referenced this issue May 15, 2024
nothing that we put into dynFrame threads is meant for in-combat execution anyways, so to avoid random unexpectedly short timeouts, pause execution if combat starts, and resume after combat ends.

There's potential for WeakAuras to be 'broken' during that combat session (due to dynamic groups being Pause()'d), but we probably couldn't have unbroken it given that ResumeAllDynamicGroups is too costly to call during combat lockdown without risking a timeout.

Fixes WeakAuras#4967 (or at least, reduces its likelihood)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 Bug This is a problem with WeakAuras.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants