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)
 	}