fix: use Copy() on presence data to get around race condition

This commit is contained in:
Jonathan Barrow 2024-05-16 07:43:26 -04:00
parent c1e06be4d5
commit 7bc3dbf4f1
No known key found for this signature in database
GPG key ID: E86E9FE9049C741F
8 changed files with 7 additions and 8 deletions

View file

@ -68,7 +68,7 @@ func AcceptFriendRequestAndReturnFriendInfo(friendRequestID uint64) (*friends_wi
if ok && connectedUser != nil {
// * Online
friendInfo.Presence = connectedUser.PresenceV2
friendInfo.Presence = connectedUser.PresenceV2.Copy().(*friends_wiiu_types.NintendoPresenceV2)
} else {
// * Offline
var lastOnlineTime uint64

View file

@ -44,7 +44,7 @@ func GetUserFriendList(pid uint32) (*types.List[*friends_wiiu_types.FriendInfo],
if ok && connectedUser != nil {
// * Online
friendInfo.Presence = connectedUser.PresenceV2
friendInfo.Presence = connectedUser.PresenceV2.Copy().(*friends_wiiu_types.NintendoPresenceV2)
} else {
// * Offline
var lastOnlineTime uint64

View file

@ -23,7 +23,7 @@ func GetFriendPresence(err error, packet nex.PacketInterface, callID uint32, pid
if ok && connectedUser != nil && connectedUser.Presence != nil {
friendPresence := friends_3ds_types.NewFriendPresence()
friendPresence.PID = pid.Copy().(*types.PID)
friendPresence.Presence = connectedUser.Presence
friendPresence.Presence = connectedUser.Presence.Copy().(*friends_3ds_types.NintendoPresence)
presenceList.Append(friendPresence)
}

View file

@ -18,7 +18,7 @@ func UpdatePresence(err error, packet nex.PacketInterface, callID uint32, presen
connection := packet.Sender().(*nex.PRUDPConnection)
currentPresence := presence
currentPresence := presence.Copy().(*friends_3ds_types.NintendoPresence)
// Send an entirely empty status, with every flag set to update
if !showGame.Value {

View file

@ -47,7 +47,7 @@ func AcceptFriendRequest(err error, packet nex.PacketInterface, callID uint32, i
return nil, nex.NewError(nex.ResultCodes.FPD.Unknown, "") // TODO - Add error message
}
senderFriendInfo.Presence = senderConnectedUser.PresenceV2
senderFriendInfo.Presence = senderConnectedUser.PresenceV2.Copy().(*friends_wiiu_types.NintendoPresenceV2)
status, err := database_wiiu.GetUserComment(senderPID)
if err != nil {

View file

@ -36,7 +36,7 @@ func UpdateAndGetAllInformation(err error, packet nex.PacketInterface, callID ui
globals.ConnectedUsers.Set(pid, connectedUser)
}
connectedUser.PresenceV2 = presence
connectedUser.PresenceV2 = presence.Copy().(*friends_wiiu_types.NintendoPresenceV2)
database_wiiu.UpdateNetworkAccountInfo(pid, nnaInfo, birthday)

View file

@ -36,7 +36,7 @@ func UpdatePresence(err error, packet nex.PacketInterface, callID uint32, presen
globals.ConnectedUsers.Set(pid, connectedUser)
}
connectedUser.PresenceV2 = presence
connectedUser.PresenceV2 = presence.Copy().(*friends_wiiu_types.NintendoPresenceV2)
notifications_wiiu.SendPresenceUpdate(presence)

View file

@ -10,7 +10,6 @@ type ConnectedUser struct {
PID uint32
Platform Platform
Connection *nex.PRUDPConnection
NNAInfo *friends_wiiu_types.NNAInfo
Presence *friends_3ds_types.NintendoPresence
PresenceV2 *friends_wiiu_types.NintendoPresenceV2
}