diff --git a/client/entities.go b/client/entities.go index 29232b06..4958c946 100644 --- a/client/entities.go +++ b/client/entities.go @@ -299,13 +299,7 @@ func (g *GroupInfo) AdministratorOrOwner() bool { func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo { r := g.Read(func(info *GroupInfo) interface{} { - for _, m := range info.Members { - f := m - if f.Uin == uin { - return f - } - } - return nil + return info.FindMemberWithoutLock(uin) }) if r == nil { return nil @@ -313,6 +307,16 @@ func (g *GroupInfo) FindMember(uin int64) *GroupMemberInfo { return r.(*GroupMemberInfo) } +func (g *GroupInfo) FindMemberWithoutLock(uin int64) *GroupMemberInfo { + for _, m := range g.Members { + f := m + if f.Uin == uin { + return f + } + } + return nil +} + func (g *GroupInfo) Update(f func(*GroupInfo)) { g.lock.Lock() defer g.lock.Unlock() diff --git a/client/global.go b/client/global.go index 21e1cc0e..f1beac84 100644 --- a/client/global.go +++ b/client/global.go @@ -451,7 +451,7 @@ func (c *QQClient) parseGroupMessage(m *msg.Message) *message.GroupMessage { mem := group.FindMember(m.Head.GetFromUin()) if mem == nil { group.Update(func(_ *GroupInfo) { - if mem = group.FindMember(m.Head.GetFromUin()); mem != nil { + if mem = group.FindMemberWithoutLock(m.Head.GetFromUin()); mem != nil { return } info, _ := c.getMemberInfo(group.Code, m.Head.GetFromUin())