fix(command_queue): deleteFile now cascade-deletes live artboards and their state machines#111
Open
mfazekas wants to merge 1 commit into
Open
Conversation
… their state machines CommandServer::m_fileDependencies[file] was created empty at loadFile and walked by deleteFile, but instantiateArtboard never appended to it - so the cascade was always a no-op. Deleting a file while artboards instantiated from it were still alive orphaned them (and their state machines) server-side, unreachable through any cleanup path. - instantiateArtboard now registers the artboard in m_fileDependencies, mirroring how instantiateStateMachine registers in m_artboardDependencies. - cleanupArtboard un-registers the artboard from m_fileDependencies so explicit create/delete cycles on a long-lived file don't grow the dependency vector unboundedly. - deleteFile detaches the dependency list before cascading (cleanupArtboard now mutates it) and erases the file only after the cascade, since dependent artboards and state machines may reference file-owned data.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
CommandServer::m_fileDependencies[file]is created empty atloadFileand walked bydeleteFileto cascade-delete dependents, butinstantiateArtboardnever appends to it — so the cascade is always a no-op. Deleting a file while artboards instantiated from it are still alive orphans them (and their state machines) server-side, with no remaining documented cleanup path. Existing tests mask this by always deleting artboards explicitly before the file.This PR:
m_fileDependenciesatinstantiateArtboard, mirroring howinstantiateStateMachineregisters inm_artboardDependencies.cleanupArtboard, so explicit create/delete cycles on a long-lived file don't grow the dependency vector unboundedly.deleteFiledetach the dependency list before cascading (sincecleanupArtboardnow mutates it), and erases the file only after the cascade, since dependent artboards and state machines may reference file-owned data.Tests added to
command_queue_test.cpp(the first one fails without the fix):deleteFilewith two live artboards + state machines cleans all of them up.deleteFilestay idempotent.Full unit test suite passes.