mirror of
https://github.com/vanitasvitae/Smack.git
synced 2024-11-25 13:32:07 +01:00
[muc] Do not invoke userHasLeft() on nickname change
When the incoming unavailable presence is signalling a nickname change (303), then do not invoke userHasLeft(), because the user actually does not leave but instead just changes its nickname. Note that this would also have had fixed SMACK-942, as it would resolve the deadlock. However, using a dedicated lock for changeNickname() still seems sensible, and if its just to avoid a bit of lock contention. What this also fixes is that a MultiUserChat does no longer invoke its listener-based callbacks after a nickname change, as previously, after a nickname change, the userHasLeft() would have been invoked, which tears down the listeners. This issue was found with MultiUserChatOccupantIntegrationTest.mucChangeNicknameInformationTest().
This commit is contained in:
parent
c34c9bdb62
commit
9447030cd4
1 changed files with 4 additions and 3 deletions
|
@ -258,13 +258,14 @@ public class MultiUserChat {
|
|||
break;
|
||||
case unavailable:
|
||||
occupantsMap.remove(from);
|
||||
if (mucUser != null && mucUser.hasStatus()) {
|
||||
if (isUserStatusModification) {
|
||||
Set<Status> status = mucUser.getStatus();
|
||||
if (mucUser != null && !status.isEmpty()) {
|
||||
if (isUserStatusModification && !status.contains(MUCUser.Status.NEW_NICKNAME_303)) {
|
||||
userHasLeft();
|
||||
}
|
||||
// Fire events according to the received presence code
|
||||
checkPresenceCode(
|
||||
mucUser.getStatus(),
|
||||
status,
|
||||
isUserStatusModification,
|
||||
mucUser,
|
||||
from);
|
||||
|
|
Loading…
Reference in a new issue