-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
fix(Core/Threading) Refactored Map class - changed i_scriptLock to mutex and some code optimization #21288
base: master
Are you sure you want to change the base?
Conversation
Change i_scriptLock to mutex and some general code improvements
I do have a couple possible concerns but it's super hard to review off my phone, will try once I'm back in town. Main one being with merging the two loops, sessions and player objects are destroyed in the session update, which means adding the player update after might be pointing to invalid memory. I see it retains that odd "optimization" with checking for t_diff so it may not be consistent |
Take your time, no rush. All logic should be exactly the same apart from _creatureRespawnScheduler.Update(t_diff); now being called after the player update, which seems harmless to me. |
Ok I had time to glance at it. You can ignore my first comment, I forgot session/player deletions are handled in "unsafe" context (world update) so there shouldn't be any issue with player being deleted during the map session update. As for i_scriptLock, I suspect (but I am not 100% sure) the original intention looks to be to prevent recursive calls rather than actually a threading/mutex protection. With a standard mutex a recursive call will deadlock. |
I checked the files making use of i_scriptlock. The only recursive call I found is
Could this be problematic in your experience? |
Removes unnecessary function calls – Instead of fetching LiquidData and passing it to another function, do all the checks right here.
My last comment was a mistake, it was an unnecessary overload instead. |
Changed i_scriptLock to mutex and some general code refactoring
Changes Proposed:
This PR proposes changes to:
Issues Addressed:
SOURCE:
The changes have been validated through:
Tests Performed:
This PR has been:
How to Test the Changes:
No functional changes have been made. The changes primarily involve code refactoring aimed at potential performance improvements, with enhanced code structure and more stability.
There should be no issues or deficiencies resulting from these changes.
Known Issues and TODO List:
How to Test AzerothCore PRs
When a PR is ready to be tested, it will be marked as [WAITING TO BE TESTED].
You can help by testing PRs and writing your feedback here on the PR's page on GitHub. Follow the instructions here:
http://www.azerothcore.org/wiki/How-to-test-a-PR
REMEMBER: when testing a PR that changes something generic (i.e. a part of code that handles more than one specific thing), the tester should not only check that the PR does its job (e.g. fixing spell XXX) but especially check that the PR does not cause any regression (i.e. introducing new bugs).
For example: if a PR fixes spell X by changing a part of code that handles spells X, Y, and Z, we should not only test X, but we should test Y and Z as well.