From 9d3690ed8f8253ab896444f0913aad3045bc6fcb Mon Sep 17 00:00:00 2001 From: Mrs4s <1844812067@qq.com> Date: Sat, 12 Dec 2020 21:17:38 +0800 Subject: [PATCH] fix lock. --- client/entities.go | 18 +++++++++++------- client/global.go | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) 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())