Open y6828863 opened 7 years ago
for ch := waitingList.Back(); ch != nil; ch = ch.Prev() { ch.Value.(chan bool) <- true waitingList.Remove(ch) } chatroom.go 文件中的第76行---79行的链表循环中删除节点的代码操作是有问题的,节点被删除后继续循环操作导致链表某些元素无法真正的被遍历处理,进而部分聊天室的成员会由于chanel阻塞而无法获取到消息,请处理下。
for ch := waitingList.Back(); ch != nil; ch = ch.Prev() { ch.Value.(chan bool) <- true waitingList.Remove(ch) }
恩,我也发现这个问题了,改成下面这样就好了
for ch := waitingList.Front(); ch != nil; ch = waitingList.Front() { ch.Value.(chan bool) <- true waitingList.Remove(ch) }
for ch := waitingList.Back(); ch != nil; ch = ch.Prev() { ch.Value.(chan bool) <- true waitingList.Remove(ch) }
chatroom.go 文件中的第76行---79行的链表循环中删除节点的代码操作是有问题的,节点被删除后继续循环操作导致链表某些元素无法真正的被遍历处理,进而部分聊天室的成员会由于chanel阻塞而无法获取到消息,请处理下。