From eacddd61206b390403a2adead8193c18347f1e81 Mon Sep 17 00:00:00 2001 From: Federico Fissore Date: Mon, 13 Apr 2015 15:35:45 +0200 Subject: [PATCH] Block discovery threads until packages is not null, otherwise boards discovered during startup will miss model name --- .../packages/discoverers/NetworkDiscovery.java | 12 ++++++++++++ .../discoverers/serial/SerialBoardsLister.java | 12 ++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java b/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java index 35995be6d..b7ede72c2 100644 --- a/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java +++ b/arduino-core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java @@ -45,6 +45,8 @@ import java.util.*; public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino.packages.discoverers.network.NetworkTopologyListener { + private static final int MAX_TIME_AWAITING_FOR_PACKAGES = 5000; + private final List boardPortsDiscoveredWithJmDNS; private final Map mappedJmDNSs; private Timer networkCheckerTimer; @@ -121,6 +123,16 @@ public class NetworkDiscovery implements Discovery, ServiceListener, cc.arduino. @Override public void serviceResolved(ServiceEvent serviceEvent) { + int sleptFor = 0; + while (BaseNoGui.packages == null && sleptFor <= MAX_TIME_AWAITING_FOR_PACKAGES) { + try { + Thread.sleep(1000); + sleptFor += 1000; + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + ServiceInfo info = serviceEvent.getInfo(); for (InetAddress inetAddress : info.getInet4Addresses()) { String address = inetAddress.getHostAddress(); diff --git a/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java b/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java index 84439ae40..142d763a0 100644 --- a/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java +++ b/arduino-core/src/cc/arduino/packages/discoverers/serial/SerialBoardsLister.java @@ -43,6 +43,8 @@ import static processing.app.I18n._; public class SerialBoardsLister extends TimerTask { + private static final int MAX_TIME_AWAITING_FOR_PACKAGES = 5000; + private final SerialDiscovery serialDiscovery; public SerialBoardsLister(SerialDiscovery serialDiscovery) { @@ -55,8 +57,14 @@ public class SerialBoardsLister extends TimerTask { @Override public void run() { - if (BaseNoGui.packages == null) { - return; + int sleptFor = 0; + while (BaseNoGui.packages == null && sleptFor <= MAX_TIME_AWAITING_FOR_PACKAGES) { + try { + Thread.sleep(1000); + sleptFor += 1000; + } catch (InterruptedException e) { + e.printStackTrace(); + } } Platform platform = BaseNoGui.getPlatform();