Browse Source

Fix annoying "Bad static key ID" asserts

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

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

@ -164,26 +164,27 @@ bool plRegistryKeyList::SetKeyUnused(plKeyImp* key, LoadStatus& loadStatusChange
} }
uint32_t id = key->GetUoid().GetObjectID(); 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) if (id == 0)
{
hsAssert(key->GetUoid().GetLocation() == plLocation::kGlobalFixedLoc, "key id == 0 but not fixed?"); hsAssert(key->GetUoid().GetLocation() == plLocation::kGlobalFixedLoc, "key id == 0 but not fixed?");
if (!FindKey(key->GetName())) else if (id < fKeys.size()) {
{ if (fKeys[id]->GetUoid().GetObjectID() == id)
hsAssert(false, "Couldn't find fixed key!"); foundKey = fKeys[id];
return false;
}
} }
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 // Got that key, decrement the key counter
if (foundKey) {
--fReffedKeys; --fReffedKeys;
if (fReffedKeys == 0) if (fReffedKeys == 0)
loadStatusChange = kTypeUnloaded; loadStatusChange = kTypeUnloaded;
return true; }
return foundKey != nullptr;
} }
void plRegistryKeyList::Read(hsStream* s) 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) void plResManager::IKeyUnreffed(plKeyImp* key)
{ {
plRegistryPageNode* page = FindPage(key->GetUoid().GetLocation()); plRegistryPageNode* page = FindPage(key->GetUoid().GetLocation());
if (page == nil) if (!page)
{ {
hsAssert(0, "Couldn't find page that key belongs to"); hsAssert(0, "Couldn't find page that key belongs to");
return; return;
} }
bool removed = page->SetKeyUnused(key); if (page->SetKeyUnused(key))
hsAssert(removed, "Key wasn't removed from page");
if (removed)
{ {
if (!page->IsLoaded()) if (!page->IsLoaded())
{ {

Loading…
Cancel
Save