void KernelObjectPool::DoState(PointerWrap &p) { auto s = p.Section("KernelObjectPool", 1); if (!s) return; int _maxCount = maxCount; p.Do(_maxCount); if (_maxCount != maxCount) { p.SetError(p.ERROR_FAILURE); ERROR_LOG(SCEKERNEL, "Unable to load state: different kernel object storage."); return; } if (p.mode == p.MODE_READ) { hleCurrentThreadName = NULL; kernelObjects.Clear(); } p.Do(nextID); p.DoArray(occupied, maxCount); for (int i = 0; i < maxCount; ++i) { if (!occupied[i]) continue; int type; if (p.mode == p.MODE_READ) { p.Do(type); pool[i] = CreateByIDType(type); // Already logged an error. if (pool[i] == NULL) return; pool[i]->uid = i + handleOffset; } else { type = pool[i]->GetIDType(); p.Do(type); } pool[i]->DoState(p); if (p.error >= p.ERROR_FAILURE) break; } }
void KernelObjectPool::DoState(PointerWrap &p) { int _maxCount = maxCount; p.Do(_maxCount); if (_maxCount != maxCount) ERROR_LOG(HLE, "Unable to load state: different kernel object storage."); if (p.mode == p.MODE_READ) { hleCurrentThreadName = NULL; kernelObjects.Clear(); } p.Do(nextID); p.DoArray(occupied, maxCount); for (int i = 0; i < maxCount; ++i) { if (!occupied[i]) continue; int type; if (p.mode == p.MODE_READ) { p.Do(type); pool[i] = CreateByIDType(type); pool[i]->uid = i + handleOffset; // Already logged an error. if (pool[i] == NULL) return; } else { type = pool[i]->GetIDType(); p.Do(type); } pool[i]->DoState(p); } p.DoMarker("KernelObjectPool"); }