Fix unaligned 64-bit atomic operation panic on ARM architecture #4815
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.
This PR fixes a critical runtime panic that occurs when running memos on ARM-based systems like Raspberry Pi 4B:
Root Cause
On ARM 32-bit architecture, 64-bit atomic operations require 8-byte memory alignment. The
itemCount int64
field in theCache
struct was not guaranteed to be 8-byte aligned because it appeared after other fields that could have irregular sizes:Solution
Moved the
itemCount
field to the beginning of the struct to ensure proper 8-byte alignment on all architectures:This is a common Go pattern for fixing atomic alignment issues and ensures the field is properly aligned regardless of the target architecture.
Testing
linux/arm
) and ARM64 (linux/arm64
) architecturesThe fix is minimal, surgical, and follows Go best practices for atomic field alignment.
Fixes #4811.
💡 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.