diff --git a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java index 4a322fcbe0b..8e65b3e598f 100644 --- a/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java +++ b/arduino-core/src/cc/arduino/packages/uploaders/SerialUploader.java @@ -199,9 +199,6 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String BaseNoGui.getDiscoveryManager().getSerialDiscoverer().pausePolling(false); } - BaseNoGui.getDiscoveryManager().getSerialDiscoverer().setUploadInProgress(false); - BaseNoGui.getDiscoveryManager().getSerialDiscoverer().pausePolling(false); - String finalUploadPort = null; if (uploadResult && doTouch) { try { @@ -210,34 +207,32 @@ public boolean uploadUsingPreferences(File sourcePath, String buildPath, String // sketch serial port reconnects (or timeout after a few seconds if the // sketch port never comes back). Doing this saves users from accidentally // opening Serial Monitor on the soon-to-be-orphaned bootloader port. - Thread.sleep(1000); - long started = System.currentTimeMillis(); - while (System.currentTimeMillis() - started < 2000) { - List portList = Serial.list(); - if (portList.contains(userSelectedUploadPort)) { - finalUploadPort = userSelectedUploadPort; - break; - } - Thread.sleep(250); - } + + // Reuse waitForUploadPort for this task, but this time we are simply waiting + // for one port to reappear. If no port reappears before the timeout, actualUploadPort is selected + finalUploadPort = waitForUploadPort(actualUploadPort, Serial.list(), false); } } catch (InterruptedException ex) { // noop } } - if (finalUploadPort == null) { - finalUploadPort = actualUploadPort; - } if (finalUploadPort == null) { finalUploadPort = userSelectedUploadPort; } BaseNoGui.selectSerialPort(finalUploadPort); + BaseNoGui.getDiscoveryManager().getSerialDiscoverer().setUploadInProgress(false); + BaseNoGui.getDiscoveryManager().getSerialDiscoverer().pausePolling(false); + return uploadResult; } private String waitForUploadPort(String uploadPort, List before) throws InterruptedException, RunnerException { + return waitForUploadPort(uploadPort, before, verbose); + } + + private String waitForUploadPort(String uploadPort, List before, boolean verbose) throws InterruptedException, RunnerException { // Wait for a port to appear on the list int elapsed = 0; while (elapsed < 10000) {