Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[fixed] fix pitfall when using == and != with MangedWeakReference #2

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

fallchildren2
Copy link

@fallchildren2 fallchildren2 commented Aug 24, 2022

The following steps should illustrate the problem:

  1. Object A is freshly constructed and gets an _objectID of 0.
  2. ManagedWeakReference of A is created -> savedObjectID will be also 0
  3. ObjectManager::persist is called and A gets a validi _objectID
  4. ManagedWeakReference of A will still have the savedObjectID of 0
    and will result in wrong behaviour of == and !=

To circumvent these this commit changes the case when one of the
compared ManagedWeakReference instances has a savedObjectID of 0 and
checks the actual reference object for the real _objectID.

The issue was found when investigating https://www.swgemu.com/bugs/view.php?id=8229
A reordering fix for the Mantis bug is also on the swgemu gerrit instance see https://review.swgemu.com/c/Core3/+/8940

The following steps should illustrate the problem:

1. Object A is freshly constructed and gets an _objectID of 0.
2. ManagedWeakReference of A is created -> savedObjectID will be also 0
3. ObjectManager::persist is called and A gets a validi _objectID
4. ManagedWeakReference of A will still have the savedObjectID of 0
   and will result in wrong behaviour of == and !=

To circumvent these this commit changes the case when one of the
compared ManagedWeakReference instances has a savedObjectID of 0 and
checks the actual reference object for the real _objectID.
@fallchildren2
Copy link
Author

Reworked the logic to make it more clear and all cases are handled and no unnecessary call to getReferenceUnsafeNoReload is done .

swgemu2deploy pushed a commit that referenced this pull request Apr 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant