mirror of https://github.com/v2ray/v2ray-core
reduce memory allocation in mux
parent
3b53fd7cd6
commit
a1cf299848
|
@ -370,8 +370,7 @@ func (w *ServerWorker) handleStatusEnd(meta *FrameMetadata, reader io.Reader) er
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *ServerWorker) handleFrame(ctx context.Context, reader io.Reader) error {
|
func (w *ServerWorker) handleFrame(ctx context.Context, reader io.Reader, metaReader *MetadataReader) error {
|
||||||
metaReader := NewMetadataReader(reader)
|
|
||||||
meta, err := metaReader.Read()
|
meta, err := metaReader.Read()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return newError("failed to read metadata").Base(err)
|
return newError("failed to read metadata").Base(err)
|
||||||
|
@ -399,6 +398,7 @@ func (w *ServerWorker) handleFrame(ctx context.Context, reader io.Reader) error
|
||||||
func (w *ServerWorker) run(ctx context.Context) {
|
func (w *ServerWorker) run(ctx context.Context) {
|
||||||
input := w.outboundRay.OutboundInput()
|
input := w.outboundRay.OutboundInput()
|
||||||
reader := buf.ToBytesReader(input)
|
reader := buf.ToBytesReader(input)
|
||||||
|
metaReader := NewMetadataReader(reader)
|
||||||
|
|
||||||
defer w.sessionManager.Close()
|
defer w.sessionManager.Close()
|
||||||
|
|
||||||
|
@ -407,7 +407,7 @@ func (w *ServerWorker) run(ctx context.Context) {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return
|
return
|
||||||
default:
|
default:
|
||||||
err := w.handleFrame(ctx, reader)
|
err := w.handleFrame(ctx, reader, metaReader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Cause(err) != io.EOF {
|
if errors.Cause(err) != io.EOF {
|
||||||
log.Trace(newError("unexpected EOF").Base(err))
|
log.Trace(newError("unexpected EOF").Base(err))
|
||||||
|
|
|
@ -19,7 +19,7 @@ type SessionManager struct {
|
||||||
func NewSessionManager() *SessionManager {
|
func NewSessionManager() *SessionManager {
|
||||||
return &SessionManager{
|
return &SessionManager{
|
||||||
count: 0,
|
count: 0,
|
||||||
sessions: make(map[uint16]*Session, 32),
|
sessions: make(map[uint16]*Session, 16),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,6 +58,10 @@ func (m *SessionManager) Add(s *Session) {
|
||||||
m.Lock()
|
m.Lock()
|
||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
|
|
||||||
|
if m.closed {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
m.sessions[s.ID] = s
|
m.sessions[s.ID] = s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +69,10 @@ func (m *SessionManager) Remove(id uint16) {
|
||||||
m.Lock()
|
m.Lock()
|
||||||
defer m.Unlock()
|
defer m.Unlock()
|
||||||
|
|
||||||
|
if m.closed {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
delete(m.sessions, id)
|
delete(m.sessions, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,7 +119,7 @@ func (m *SessionManager) Close() {
|
||||||
s.output.Close()
|
s.output.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
m.sessions = make(map[uint16]*Session)
|
m.sessions = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type Session struct {
|
type Session struct {
|
||||||
|
|
Loading…
Reference in New Issue