@@ -1038,6 +1038,7 @@ func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, m
1038
1038
// 1. The timeout completed.
1039
1039
// 2. The parent context was canceled.
1040
1040
<- ctx .Done ()
1041
+ logger .Debug (ctx , "context done" , slog .Error (ctx .Err ()))
1041
1042
_ = process .Kill ()
1042
1043
}()
1043
1044
// We don't need to separately monitor for the process exiting.
@@ -1049,6 +1050,8 @@ func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, m
1049
1050
read , err := rpty .ptty .OutputReader ().Read (buffer )
1050
1051
if err != nil {
1051
1052
// When the PTY is closed, this is triggered.
1053
+ // Error is typically a benign EOF, so only log for debugging.
1054
+ logger .Debug (ctx , "PTY output read error" , slog .Error (err ))
1052
1055
break
1053
1056
}
1054
1057
part := buffer [:read ]
@@ -1060,8 +1063,14 @@ func (a *agent) handleReconnectingPTY(ctx context.Context, logger slog.Logger, m
1060
1063
break
1061
1064
}
1062
1065
rpty .activeConnsMutex .Lock ()
1063
- for _ , conn := range rpty .activeConns {
1064
- _ , _ = conn .Write (part )
1066
+ for cid , conn := range rpty .activeConns {
1067
+ _ , err = conn .Write (part )
1068
+ logger .Debug (ctx ,
1069
+ "wrote to active conn" ,
1070
+ slog .F ("other_conn_id" , cid ),
1071
+ slog .F ("data" , part ),
1072
+ slog .Error (err ),
1073
+ )
1065
1074
}
1066
1075
rpty .activeConnsMutex .Unlock ()
1067
1076
}
0 commit comments