@@ -35,16 +35,17 @@ var idGenerator int64
35
35
36
36
func NewSession (c Conn , mgr ConnManager , user User , handler Handler ) * Session {
37
37
sess := & Session {
38
- id : atomic .AddInt64 (& idGenerator , 1 ),
39
- c : c ,
40
- mgr : mgr ,
41
- user : user ,
42
- handler : handler ,
43
- dataLock : & sync.RWMutex {},
44
- data : make (map [string ]interface {}),
45
- reqLock : & sync.RWMutex {},
46
- requests : make (map [int64 ]chan Packet ),
47
- closed : make (chan struct {}),
38
+ id : atomic .AddInt64 (& idGenerator , 1 ),
39
+ c : c ,
40
+ mgr : mgr ,
41
+ user : user ,
42
+ handler : handler ,
43
+ dataLock : & sync.RWMutex {},
44
+ data : make (map [string ]interface {}),
45
+ reqLock : & sync.RWMutex {},
46
+ requests : make (map [int64 ]chan Packet ),
47
+ closed : make (chan struct {}),
48
+ lastPackTs : time .Now (),
48
49
}
49
50
50
51
go sess .readPacket ()
@@ -79,7 +80,9 @@ func (s *Session) readPacket() {
79
80
if ok {
80
81
ch <- packet
81
82
close (ch )
82
- continue
83
+ s .reqLock .Lock ()
84
+ delete (s .requests , packet .Id ())
85
+ s .reqLock .Unlock ()
83
86
} else {
84
87
go s .handler .Handle (packet , s )
85
88
}
@@ -135,6 +138,7 @@ func (s *Session) SendRequest(p Packet) (<-chan Packet, error) {
135
138
ch := make (chan Packet , 1 )
136
139
s .reqLock .Lock ()
137
140
s .requests [p .Id ()] = ch
141
+ s .reqLock .Unlock ()
138
142
139
143
if err := s .SendPacket (p ); err != nil {
140
144
return nil , err
@@ -147,6 +151,7 @@ func (s *Session) SendRequestTimeout(p Packet, timeout time.Duration) (Packet, e
147
151
ch := make (chan Packet , 1 )
148
152
s .reqLock .Lock ()
149
153
s .requests [p .Id ()] = ch
154
+ s .reqLock .Unlock ()
150
155
151
156
if err := s .SendPacket (p ); err != nil {
152
157
return nil , err
0 commit comments