瀏覽代碼

fix deadlock in session

Mike 2 年之前
父節點
當前提交
76d8fc7a38
共有 1 個文件被更改,包括 4 次插入4 次删除
  1. 4 4
      state/session.go

+ 4 - 4
state/session.go

@@ -169,10 +169,10 @@ func (s *Session) UserInfo() oscar.TLVList {
 }
 
 func (s *Session) Warning() uint16 {
-	var w uint16
 	s.mutex.RLock()
+	defer s.mutex.RUnlock()
+	var w uint16
 	w = s.warning
-	s.mutex.RUnlock()
 	return w
 }
 
@@ -181,11 +181,11 @@ func (s *Session) RecvMessage() chan oscar.SNACMessage {
 }
 
 func (s *Session) SendMessage(msg oscar.SNACMessage) SessSendStatus {
-	s.mutex.Lock()
+	s.mutex.RLock()
+	defer s.mutex.RUnlock()
 	if s.closed {
 		return SessSendClosed
 	}
-	s.mutex.Unlock()
 	select {
 	case s.msgCh <- msg:
 		return SessSendOK