File tree Expand file tree Collapse file tree 1 file changed +21
-16
lines changed Expand file tree Collapse file tree 1 file changed +21
-16
lines changed Original file line number Diff line number Diff 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}
You can’t perform that action at this time.
0 commit comments