Commit 450e6da2 authored by AlexStocks's avatar AlexStocks

add timeout for Session:WritePkg

parent e7d1b729
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
* 2 wDeadline -> wTimeout * 2 wDeadline -> wTimeout
* 3 disable readtimeout in gettyWSConn:read * 3 disable readtimeout in gettyWSConn:read
* 4 add gettyWSConn:updateWriteDeadline * 4 add gettyWSConn:updateWriteDeadline
* 5 add timeout for Session:WritePkg
- 2018/03/08 - 2018/03/08
> feature > feature
......
...@@ -77,7 +77,7 @@ type Session interface { ...@@ -77,7 +77,7 @@ type Session interface {
SetAttribute(interface{}, interface{}) SetAttribute(interface{}, interface{})
RemoveAttribute(interface{}) RemoveAttribute(interface{})
WritePkg(interface{}) error WritePkg(interface{}, time.Duration) error
WriteBytes([]byte) error WriteBytes([]byte) error
WriteBytesArray(...[]byte) error WriteBytesArray(...[]byte) error
Close() Close()
...@@ -340,7 +340,7 @@ func (s *session) sessionToken() string { ...@@ -340,7 +340,7 @@ func (s *session) sessionToken() string {
} }
// Queued Write, for handler // Queued Write, for handler
func (s *session) WritePkg(pkg interface{}) error { func (s *session) WritePkg(pkg interface{}, timeout time.Duration) error {
if s.IsClosed() { if s.IsClosed() {
return ErrSessionClosed return ErrSessionClosed
} }
...@@ -354,18 +354,14 @@ func (s *session) WritePkg(pkg interface{}) error { ...@@ -354,18 +354,14 @@ func (s *session) WritePkg(pkg interface{}) error {
} }
}() }()
var d = s.writeTimeout() if timeout <= 0 {
if d > netIOTimeout { timeout = netIOTimeout
d = netIOTimeout
} }
select { select {
case s.wQ <- pkg: case s.wQ <- pkg:
break // for possible gen a new pkg break // for possible gen a new pkg
// default: case <-wheel.After(timeout):
// case <-time.After(s.wTimeout):
// case <-time.After(netIOTimeout):
case <-wheel.After(d):
log.Warn("%s, [session.WritePkg] wQ{len:%d, cap:%d}", s.Stat(), len(s.wQ), cap(s.wQ)) log.Warn("%s, [session.WritePkg] wQ{len:%d, cap:%d}", s.Stat(), len(s.wQ), cap(s.wQ))
return ErrSessionBlocked return ErrSessionBlocked
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment