|  | @@ -182,6 +182,13 @@ func fetchInput(ctx context.Context, s *session, output buf.Writer) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +func waitForDone(ctx context.Context, s *session) {
 | 
	
		
			
				|  |  | +	<-ctx.Done()
 | 
	
		
			
				|  |  | +	s.closeUplink()
 | 
	
		
			
				|  |  | +	s.closeDownlink()
 | 
	
		
			
				|  |  | +	s.output.Close()
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  func (m *Client) Dispatch(ctx context.Context, outboundRay ray.OutboundRay) bool {
 | 
	
		
			
				|  |  |  	m.access.Lock()
 | 
	
		
			
				|  |  |  	defer m.access.Unlock()
 | 
	
	
		
			
				|  | @@ -210,6 +217,7 @@ func (m *Client) Dispatch(ctx context.Context, outboundRay ray.OutboundRay) bool
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  	m.sessions[id] = s
 | 
	
		
			
				|  |  |  	go fetchInput(ctx, s, m.inboundRay.InboundInput())
 | 
	
		
			
				|  |  | +	go waitForDone(ctx, s)
 | 
	
		
			
				|  |  |  	return true
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |