Browse Source

Fix annoying "Bad static key ID" asserts

Adam Johnson 11 years ago
parent
commit
07eab8def4
  1. 29
      Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp
  2. 7
      Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp

29
Sources/Plasma/PubUtilLib/plResMgr/plRegistryKeyList.cpp

@ -164,26 +164,27 @@ bool plRegistryKeyList::SetKeyUnused(plKeyImp* key, LoadStatus& loadStatusChange
}
uint32_t id = key->GetUoid().GetObjectID();
hsAssert(id <= fKeys.size(), "Bad static key id");
plKeyImp* foundKey = nullptr;
// Fixed Keys will have id == 0. Let's just make sure we have it before we toss it.
// Fixed Keys use ID == 0
if (id == 0)
{
hsAssert(key->GetUoid().GetLocation() == plLocation::kGlobalFixedLoc, "key id == 0 but not fixed?");
if (!FindKey(key->GetName()))
{
hsAssert(false, "Couldn't find fixed key!");
return false;
}
else if (id < fKeys.size()) {
if (fKeys[id]->GetUoid().GetObjectID() == id)
foundKey = fKeys[id];
}
else if (id > fKeys.size())
return false;
// Last chance: do a slow name search for that key.
if (!foundKey)
foundKey = FindKey(key->GetUoid().GetObjectName());
// Got that key, decrement the key counter
--fReffedKeys;
if (fReffedKeys == 0)
loadStatusChange = kTypeUnloaded;
return true;
if (foundKey) {
--fReffedKeys;
if (fReffedKeys == 0)
loadStatusChange = kTypeUnloaded;
}
return foundKey != nullptr;
}
void plRegistryKeyList::Read(hsStream* s)

7
Sources/Plasma/PubUtilLib/plResMgr/plResManager.cpp

@ -1665,16 +1665,13 @@ void plResManager::IKeyReffed(plKeyImp* key)
void plResManager::IKeyUnreffed(plKeyImp* key)
{
plRegistryPageNode* page = FindPage(key->GetUoid().GetLocation());
if (page == nil)
if (!page)
{
hsAssert(0, "Couldn't find page that key belongs to");
return;
}
bool removed = page->SetKeyUnused(key);
hsAssert(removed, "Key wasn't removed from page");
if (removed)
if (page->SetKeyUnused(key))
{
if (!page->IsLoaded())
{

Loading…
Cancel
Save