Issue Details (XML | Word | Printable)

Key: THLP-3
Type: Bug Bug
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Nikk (Nechckn)
Votes: 1
Watchers: 1
Operations

If you were logged in you would be able to see more operations.
TipHelper

nTipHelper.lua line 303 / No tooltip to add line to in nTipHelper:AddLine() error is being thrown for users with SOCD loaded

Created: 14/May/09 08:51 PM   Updated: 27/Nov/09 11:51 AM
Component/s: None
Affects Version/s: None
Fix Version/s: None

Issue Links:
Reference


 Description  « Hide
Issue appears to have something to do with load time, maybe... happens when users have "Sick of Clicking Dailies" loaded, along with Auctioneer "force load scan data" set to inactive. The error does not get thrown when it is set to active.

One of the errors is:

ID: 1
Error occured in: Global
Count: 1
Message: ...ce\AddOns\Auc-Advanced\Libs\TipHelper\nTipHelper.lua line 303:
Error, no tooltip to add line to in nTipHelper:AddLine()
Debug:
(tail call): ?
[C]: ?
[C]: assert()
...ce\AddOns\Auc-Advanced\Libs\TipHelper\nTipHelper.lua:303: AddLine()
...dvanced\Modules\Auc-Util-SimpleAuction\AucSimple.lua:106: ProcessTooltip()
...dvanced\Modules\Auc-Util-SimpleAuction\AucSimple.lua:45: Processor()
Auc-Advanced\CoreMain.lua:136: callback()
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:90:
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:75
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:137:
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:98
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:278: OnTooltipSetItem()
Enchantrix\EnxMain.lua:220:
Enchantrix\EnxMain.lua:216
[C]: ?
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:252:
...AddOns\Auc-Advanced\Libs\LibExtraTip\LibExtraTip.lua:246
(tail call): ?
..\FrameXML\ItemRef.lua:96:
..\FrameXML\ItemRef.lua:2
(tail call): ?
[C]: ?
WIM\Modules\URLHandler.lua:206:
WIM\Modules\URLHandler.lua:201
WIM\Modules\Filters.lua:823:
WIM\Modules\Filters.lua:791
...ace\AddOns\Blizzard_CombatLog\Blizzard_CombatLog.lua:3603: SetItemRef()
SickOfClickingDailies\wotlk.lua:78:
SickOfClickingDailies\wotlk.lua:75
(tail call): ?
[C]: ?
[string "safecall Dispatcher[1]"]:9:
[string "safecall Dispatcher[1]"]:5
(tail call): ?
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:531: EnableAddon()
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:543: EnableAddon()
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:621:
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:607
[C]: LoadAddOn()
MacroBank\MacroBank.lua:71:
MacroBank\MacroBank.lua:65
(tail call): ?
[C]: ?
[string "safecall Dispatcher[1]"]:9:
[string "safecall Dispatcher[1]"]:5
(tail call): ?
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:531: EnableAddon()
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:621:
...s\AckisRecipeList\libs\AceAddon-3.0\AceAddon-3.0.lua:607
[C]: LoadAddOn()
..\FrameXML\UIParent.lua:229: UIParentLoadAddOn()
..\FrameXML\UIParent.lua:252: CombatLog_LoadUI()
..\FrameXML\UIParent.lua:497:
..\FrameXML\UIParent.lua:469
AddOns:
Swatter, v5.4.4157 (WallabyII)
AucAdvanced, v5.4.4157 (WallabyII)
AucFilterBasic, v5.4.4157 (WallabyII)
AucFilterOutlier, v5.4.4157.2531
AucMatchUndercut, v5.4.4157.2531
AucScanData, v5.4.4157 (WallabyII)
AucStatClassic, v5.4.4157 (WallabyII)
AucStatHistogram, v5.4.4157 (WallabyII)
AucStatiLevel, v5.4.4157 (WallabyII)
AucStatPurchased, v5.4.4157 (WallabyII)
AucStatSales, v5.4.4157.2842
AucStatSimple, v5.4.4157 (WallabyII)
AucStatStdDev, v5.4.4157 (WallabyII)
AucStatWOWEcon, v5.4.4157.2530
AucUtilAHWindowControl, v5.4.4157.3311
AucUtilAppraiser, v5.4.4157.2530
AucUtilAskPrice, v5.4.4157.3175
AucUtilAutoMagic, v5.4.4157.3142
AucUtilCompactUI, v5.4.4157.2530
AucUtilEasyBuyout, v5.4.4157.3583
AucUtilItemSuggest, v5.4.4157.3108
AucUtilPriceLevel, v5.4.4157.2545
AucUtilScanButton, v5.4.4157.2530
AucUtilScanFinish, v5.4.4157.2530
AucUtilScanProgress, v5.4.4157.2530
AucUtilSearchUI, v5.4.4157.3655
AucUtilSimpleAuction, v5.4.4157.0
AucUtilVendMarkup, v5.4.4157.2530
Babylonian, v5.1.DEV.130
BeanCounter, v5.4.4157 (WallabyII)
Enchantrix, v5.4.4157 (WallabyII)
EnchantrixBarker, v5.4.4157 (WallabyII)
Gatherer, v3.1.13
Stubby, v5.4.4157 (WallabyII)



 All   Comments   Change History   Transitions   FishEye   Crucible      Sort Order: Ascending order - Click to sort in descending order
Bryan (brykrys) added a comment - 14/May/09 09:28 PM
At the bottom of the stack trace, the line:
..\FrameXML\UIParent.lua:497:
indicates that this is happening during "PLAYER_LOGIN"

Matthew Benner (MattBnr) added a comment - 17/May/09 09:20 AM
It is happening for more then just SOCD as noted in this thread http://forums.norganna.org/discussion/10501/continuing-error-message/#Comment_62855

Nikk (Nechckn) added a comment - 26/Jul/09 05:50 PM
The ticket for SOCD is http://www.wowace.com/addons/sick-of-clicking-dailies/tickets/25-auctioneer-error-with-socd-enabled/ so it would be nice to comment there once this has been resolved.

Bryan (brykrys) added a comment - 27/Jul/09 02:10 PM
This error comes from an assert which is intended to warn when something is wrong with TipHelper's internal state. TipHelper can only operate on one tooltip at a time; you set the tooltip at the top of your OnTooltip function and release it at the end.
Within Auctioneer, this all happens in CoreMain.lua (65-139) and no other Auctioneer module calls either SetFrame or ClearFrame.
The error indicates that somehow ClearFrame is getting called early but, assuming that program execution is linear, this appears to be impossible.

Several modules need access to the ScanData image: Auc-ScanData itself, SimpleAuction (for competition) and anything that uses Appraiser pricing (the matcher modules).
If one of these tries to add lines to the tooltip, this will force the loading of the Auc-ScanData AddOn (unless it has already been pre-loaded by the Force Scan Data option).

SOCD consists of multiple modules. Each module has an OnEnable function, which gets called via the Ace framework during PLAYER_LOGIN.
Several of these modules force items into the local item cache by making a sequence of SetItemRef calls. Each call prompts Auctioneer (and every other AddOn hooking ItemRefTooltip) to try to add lines.

By adding a few debug lines (OK, a lot of debug lines), I observed this:

SOCD's WOTLK module's OnEnable fires its first SetItemRef
This triggers Auctioneer's tooltip handler, which includes a call to LoadAddOn("Auc-ScanData"). This call does not return immediately *

SOCD's BC module enables and fires several SetItemRefs. These do not cause errors: in fact they do cause a second call to LoadAddOn("Auc-ScanData") but this appears to return immediately (though the AddOn is not fully loaded, as we can see by the following...)

The ADDON_LOADED event for Auc-ScanData fires

The first call to LoadAddOn above * now returns and execution continues where it left off
TipHelper's internal state has been changed by the above calls to SetItemRef: it would have thrown the error at this point, but I replaced it with a debug print instead, to see what happens next...
SOCD's WOTLK module happily continues through its OnEnable sequence

It does appear that program execution is not always linear, notably not if LoadAddOn() gets called.


Bryan (brykrys) added a comment - 28/Jul/09 08:08 AM
The two possible paths appear to be (A) Avoid having Auc-ScanData load in the middle of vulnerable functions or (B) Try to handle it gracefully if it happens (i.e. fail in a safe way).

(A) The only way to be sure is to Nuke it from Orb.., no wait, the only way to be sure is to make Auc-ScanData no longer Load on Demand. This is undesirable for all the reasons that it was made Load on Demand in the first place.
Another hacky possibility is to force-load it early if it is needed for tooltips - by loading a dummy item into one of the tooltips during Auctioneer's ADDON_LOADED
(or a really, really hacky possibility is to load Auc-Advanced early if we detect SOCD is installed...)

(B) First we would need to silence the assert - undesirable for all the reasons the assert is there in the first place - and then silence the other errors that result from ignoring the first assert. It is possible we could silence it only in this situation but detection makes things more complicated (TipHelper is supposed to be an independant library, so it shouldn't go looking for Auc-ScanData or Auc-Advanced).
Perhaps something could be done in CoreMain using pcalls? Though this could cause some side affects if any function between the pcall and the assert gets aborted in the middle of making some change or other.

Preferably we should also prevent access to Auc-ScanData's saved variables until the ADDON_LOADED fires.
This means either altering the callers to handle nil returns, or providing a dummy value for them to work on, then cleaning that up afterward.


Nikk (Nechckn) added a comment - 04/Aug/09 09:09 PM
With the change needed for http://jira.norganna.org/browse/ADV-470 , this abates.

If it needs to be changed back, then we may need to review for possible conflicts.


William (Kandoko) added a comment - 04/Aug/09 09:09 PM
Bryan, can you check and see if the change to scan data load made due to patch 3.2 has any effect on this bug.
I have installed SOCD and with and without forced scan data load I have had no errors thrown.
http://jira.norganna.org/browse/ADV-470

Bryan (brykrys) added a comment - 12/Aug/09 04:15 AM
Agreed, this appears appears to have stopped happening after patch 3.2.
Our change to Auctioneer should have made no difference to this issue, so it looks like Blizzard fixed something in LoadAddOn.

Changing to Info Needed. If noone reports this error within a few weeks, can be closed.



dinesh added a comment - 20/Nov/09 05:59 PM
another report in the same thread.

Bryan (brykrys) added a comment - 27/Nov/09 11:51 AM
ADV-507(r4543) is an attempted workaround for this issue. It does not address the underlying cause, it just attempts to sidestep the problem. Also, it may not work for every configuration.