Draft
Conversation
Co-authored-by: MuyuanMS <116717757+MuyuanMS@users.noreply.github.com>
Co-authored-by: MuyuanMS <116717757+MuyuanMS@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Re-registering AppInstance causes Key to be invalid
Fix AppInstance key reregistration issue
May 22, 2025
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.
Issue
When an app instance unregisters its key using
AppInstance.UnregisterKey()and then callsAppInstance.FindOrRegisterKey()with the same key again, it appears to "successfully" register, but the key is actually invalid (returns an empty string). This means that when a subsequent process callsAppInstance.FindOrRegisterKey()with the same key, it will incorrectly returnnullinstead of finding the correct instance.Root Cause
The issue was in the
SharedMemory::IsValid()method, which only checked if the name exists (m_name.size() != 0), but didn't verify if the underlying memory view is valid:After calling
UnregisterKey(), them_key.Reset()method would clear the memory view and file handle, but if the name was somehow preserved,IsValid()would incorrectly return true, causing the key validation to fail in unexpected ways.Fix
Modified the
SharedMemory::IsValid()method to check both that the name exists AND that the memory view is valid:Testing
Added a new test case specifically for the unregister and re-register scenario to verify the fix works correctly:
This fix ensures that when an app instance unregisters its key, subsequent calls to
FindOrRegisterKeywith the same key will properly register the key again, allowing the instance to be found correctly by other processes.Fixes #5.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.