Skip to content

Commit 3f2691b

Browse files
committed
Clear gRPC request only after monitor successfully closes
1 parent 7e472a8 commit 3f2691b

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

Diff for: commands/daemon/daemon.go

+21-16
Original file line numberDiff line numberDiff line change
@@ -512,10 +512,9 @@ func (s *ArduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorSer
512512
// Send a message with Success set to true to notify the caller of the port being now active
513513
_ = stream.Send(&rpc.MonitorResponse{Success: true})
514514

515+
cancelCtx, cancel := context.WithCancel(stream.Context())
515516
go func() {
516-
// close port on gRPC call EOF or errors
517-
defer portProxy.Close()
518-
517+
defer cancel()
519518
for {
520519
msg, err := stream.Recv()
521520
if errors.Is(err, io.EOF) {
@@ -547,19 +546,25 @@ func (s *ArduinoCoreServerImpl) Monitor(stream rpc.ArduinoCoreService_MonitorSer
547546
}
548547
}()
549548

550-
buff := make([]byte, 4096)
551-
for {
552-
n, err := portProxy.Read(buff)
553-
if errors.Is(err, io.EOF) {
554-
break
555-
}
556-
if err != nil {
557-
stream.Send(&rpc.MonitorResponse{Error: err.Error()})
558-
break
559-
}
560-
if err := stream.Send(&rpc.MonitorResponse{RxData: buff[:n]}); err != nil {
561-
break
549+
go func() {
550+
defer cancel()
551+
buff := make([]byte, 4096)
552+
for {
553+
n, err := portProxy.Read(buff)
554+
if errors.Is(err, io.EOF) {
555+
break
556+
}
557+
if err != nil {
558+
stream.Send(&rpc.MonitorResponse{Error: err.Error()})
559+
break
560+
}
561+
if err := stream.Send(&rpc.MonitorResponse{RxData: buff[:n]}); err != nil {
562+
break
563+
}
562564
}
563-
}
565+
}()
566+
567+
<-cancelCtx.Done()
568+
portProxy.Close()
564569
return nil
565570
}

0 commit comments

Comments
 (0)