I'm having several crashes a day because of this method and reading the code from HandleGroupLeaveOpcode til the RemoveAllInvites i came to some conclusions that might help solving this problem.
I did this topic to discuss the matter, to see if there is some sense on what i think it is.
- RemoveAllInvites has little relation with all the code that comes before it, the variables used (m_invitees) seem to be untouched until this call.
- m_invitees is a list of Player* only.
- Player::SetGroupInvite(NULL) just modify Player.m_groupInvite variable setting it to NULL.
So my (weak) conclusion is that, been as simples as this call is, the problem might be with one Player* on m_invitees... for example, what happens with the player doesn't exist anymore for some reason? (Player* now points to somewhere that is no longer a player) And i think that would justify an ACCESS_VIOLATION.
Maybe the destruction of a Player (logging out, rejecting party, i dunno) in somewhere isn't removing him from Group.m_invitees.
Anyways, if i'm right on my conclusions then a check to guarantee that itr* has a good and nice player* would solve this? My opinion is that it would, but i would like to listen to other devs their opinion.
Thanks for reading til here... below i quoted free-back that reported that crash (again, 2 or 3 times others had reported before) and his crash dump.