diff --git a/arduino/discovery/discovery.go b/arduino/discovery/discovery.go index f97905599c4..4150a90c426 100644 --- a/arduino/discovery/discovery.go +++ b/arduino/discovery/discovery.go @@ -23,6 +23,7 @@ import ( "io" "os/exec" "strings" + "sync" "time" "github.com/arduino/arduino-cli/arduino/cores" @@ -33,6 +34,7 @@ import ( // Discovery is an instance of a discovery tool type Discovery struct { + sync.Mutex ID string in io.WriteCloser out io.ReadCloser @@ -88,6 +90,11 @@ func (d *Discovery) Start() error { // List retrieve the port list from this discovery func (d *Discovery) List() ([]*BoardPort, error) { + // ensure the connection to the discoverer is unique to avoid messing up + // the messages exchanged + d.Lock() + defer d.Unlock() + if _, err := d.in.Write([]byte("LIST\n")); err != nil { return nil, fmt.Errorf("sending LIST command to discovery: %s", err) }