fix infinite close
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Evan Reichard 2025-09-22 15:30:54 -04:00
parent b8714e52de
commit d5de31eda7

View File

@ -70,6 +70,10 @@ func (t *Tunnel) Start() {
} }
func (t *Tunnel) initStreamConnection(streamID string) error { func (t *Tunnel) initStreamConnection(streamID string) error {
if t.connBuilder == nil {
return nil
}
if _, found := t.getStream(streamID); found { if _, found := t.getStream(streamID); found {
return nil return nil
} }
@ -105,8 +109,17 @@ func (t *Tunnel) StartStream(streamID string) error {
return fmt.Errorf("stream %s does not exist", streamID) return fmt.Errorf("stream %s does not exist", streamID)
} }
// Close Stream
defer func() {
_ = t.sendWS(&types.Message{
Type: types.MessageTypeClose,
StreamID: streamID,
})
t.CloseStream(streamID)
}()
// Start Stream // Start Stream
defer t.CloseStream(streamID)
buffer := make([]byte, 4096) buffer := make([]byte, 4096)
for { for {
n, err := conn.Read(buffer) n, err := conn.Read(buffer)
@ -136,11 +149,6 @@ func (t *Tunnel) WriteStream(streamID string, data []byte) error {
} }
func (t *Tunnel) CloseStream(streamID string) error { func (t *Tunnel) CloseStream(streamID string) error {
_ = t.sendWS(&types.Message{
Type: types.MessageTypeClose,
StreamID: streamID,
})
t.streamsMu.Lock() t.streamsMu.Lock()
defer t.streamsMu.Unlock() defer t.streamsMu.Unlock()
if conn, ok := t.streams[streamID]; ok { if conn, ok := t.streams[streamID]; ok {