{"record":{"id":"765f6fd81b83f56c","repo":"EllanJiang/GameFramework","slug":"read-write-version-list-has-been-parsed","errorCode":null,"errorMessage":"Read-write version list has been parsed.","messagePattern":"Read-write version list has been parsed\\.","errorType":"exception","errorClass":"GameFrameworkException","httpStatus":null,"severity":"error","filePath":"GameFramework/Resource/ResourceManager.ResourceChecker.cs","lineNumber":440,"sourceCode":"                }\n            }\n\n            private void OnLoadReadOnlyVersionListFailure(string fileUri, string errorMessage, object userData)\n            {\n                if (m_ReadOnlyVersionListReady)\n                {\n                    throw new GameFrameworkException(\"Read-only version list has been parsed.\");\n                }\n\n                m_ReadOnlyVersionListReady = true;\n                RefreshCheckInfoStatus();\n            }\n\n            private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[] bytes, float duration, object userData)\n            {\n                if (m_ReadWriteVersionListReady)\n                {\n                    throw new GameFrameworkException(\"Read-write version list has been parsed.\");\n                }\n\n                MemoryStream memoryStream = null;\n                try\n                {\n                    memoryStream = new MemoryStream(bytes, false);\n                    LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream);\n                    if (!versionList.IsValid)\n                    {\n                        throw new GameFrameworkException(\"Deserialize read-write version list failure.\");\n                    }\n\n                    LocalVersionList.Resource[] resources = versionList.GetResources();\n                    LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems();\n\n                    foreach (LocalVersionList.FileSystem fileSystem in fileSystems)\n                    {\n                        int[] resourceIndexes = fileSystem.GetResourceIndexes();","sourceCodeStart":422,"sourceCodeEnd":458,"githubUrl":"https://github.com/EllanJiang/GameFramework/blob/d0c010b05167c58e92350449d04864a91ca13fd2/GameFramework/Resource/ResourceManager.ResourceChecker.cs#L422-L458","documentation":"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.","triggerScenarios":"OnLoadReadWriteVersionListSuccess invoked a second time after the read-write version list was already parsed (m_ReadWriteVersionListReady == true).","commonSituations":"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.","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"],"exampleFix":"// before: per-chunk success invocation\nforeach (chunk in chunks) onSuccess(allBytes); // fires N times\n// after: fire once when fully loaded\nonSuccess(assembledBytes); // fires once","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { checker.CheckResources(); }\ncatch (GameFrameworkException ex) when (ex.Message.Contains(\"Read-write version list has been parsed\")) { Log.Warning(\"Duplicate read-write version list success event\"); }","preventionTips":["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"],"tags":["gameframework","resource","version-list","duplicate-callback"],"backgroundTag":"invalid-state-transition","analyzedSha":"d0c010b05167c58e92350449d04864a91ca13fd2","analyzedAt":"2026-09-15T13:37:15.352Z","contentChangedAt":"2026-09-15T13:37:15.352Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}