EllanJiang/GameFramework · error · GameFrameworkException
Read-write version list has been parsed.
Error message
Read-write version list has been parsed.
What it means
Mirror of the read-only guard for the read-write (sandbox) version list: OnLoadReadWriteVersionListSuccess throws if m_ReadWriteVersionListReady is already true. It prevents double parsing of the read-write version list, which would append duplicate resources to the check state.
Solutions
- Guarantee single success callback per read-write version list load
- Check that ReadWriteVersionListHelper isn't subscribed multiple times
- Reset the checker before re-running checks
- Inspect the helper for accidental loops calling the success callback per chunk
Example fix
// before: per-chunk success invocation foreach (chunk in chunks) onSuccess(allBytes); // fires N times // after: fire once when fully loaded onSuccess(assembledBytes); // fires once
Defensive patterns
Strategy: try-catch
Try / catch
try { checker.CheckResources(); }
catch (GameFrameworkException ex) when (ex.Message.Contains("Read-write version list has been parsed")) { Log.Warning("Duplicate read-write version list success event"); } Prevention
- Fire a single success callback per read-write list load
- Don't call success per chunk/partial read
- Reset checker state before repeat checks
- Audit ReadWriteVersionListHelper subscriptions
When it happens
Trigger: OnLoadReadWriteVersionListSuccess invoked a second time after the read-write version list was already parsed (m_ReadWriteVersionListReady == true).
Common situations: Duplicate success events from the read-write load helper; starting a second resource check without resetting flags; re-entrant dispatch from a custom load bytes helper.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Read-only version list has been parsed.
- Updatable version list has been parsed.
- Deserialize updatable version list failure.
- Parse updatable version list exception
- Updatable version list
AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15).
Data as JSON: /api/errors/765f6fd81b83f56c.
Report an issue: GitHub.
Appendix: source
Thrown at GameFramework/Resource/ResourceManager.ResourceChecker.cs:440
}
}
private void OnLoadReadOnlyVersionListFailure(string fileUri, string errorMessage, object userData)
{
if (m_ReadOnlyVersionListReady)
{
throw new GameFrameworkException("Read-only version list has been parsed.");
}
m_ReadOnlyVersionListReady = true;
RefreshCheckInfoStatus();
}
private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[] bytes, float duration, object userData)
{
if (m_ReadWriteVersionListReady)
{
throw new GameFrameworkException("Read-write version list has been parsed.");
}
MemoryStream memoryStream = null;
try
{
memoryStream = new MemoryStream(bytes, false);
LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream);
if (!versionList.IsValid)
{
throw new GameFrameworkException("Deserialize read-write version list failure.");
}
LocalVersionList.Resource[] resources = versionList.GetResources();
LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems();
foreach (LocalVersionList.FileSystem fileSystem in fileSystems)
{
int[] resourceIndexes = fileSystem.GetResourceIndexes();View on GitHub (pinned to d0c010b051)