Skip to content

jmDNS causing 6x longer (30s vs 5s) startup / command-line verify in Arduino 1.8.5 on macOS 10.13.3 #7388

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
cpbotha opened this issue Mar 29, 2018 · 1 comment

Comments

@cpbotha
Copy link

cpbotha commented Mar 29, 2018

When I use the command-line mode of arduino to verify a sketch, jmDNS blocks the whole process for about 25 seconds (verify itself is about 5s) before timing out. I've put the program output further down in this report.

This happens for command-line use, but it also happens when I just start up the Arduino IDE for normal use.

It's interesting that the address it seems to be bound to is fe80-0-0-0-aede-48ff-fe00-1122-en5.local, which is en5, which on this new macbook with touchbar is the Apple built-in iBridge USB device: https://apple.stackexchange.com/questions/261972/what-is-ibridge

I have no idea why jmDNS wants to use this interface.

I also tried the Arduino 1.9.0 Beta -- this is much better, because it does not seem to block for jmDNS, but jmDNS is still raising an exception, this time it seems to be bound to a more reasonable host + interface (meep17.local which is the macbook's own hostname). See command output right at the bottom of this issue.

(well, if I keep on running the 1.9.0 IDE for long enough from the console, jmDNS raises more errors on many of my other network interfaces.)

I hope that I can start using Arduino 1.9 for my project, because this issue is greatly complicating my development workflow. (On my Linux dev machines, this problem does not exist. Also, VERY strangely, when the visual studio code arduino extension runs arduino 1.8.5 with the exact same arguments (I checked) there is no delay -- only difference is that vscode spawns arduino CLI as a child process of itself.)

Arduino 1.8.5 verify output

$ time /Applications/Arduino.app/Contents/MacOS/Arduino --verify ab-hivemind.ino
Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
[JmDNS(fe80-0-0-0-aede-48ff-fe00-1122-en5.local.).Timer] WARN javax.jmdns.impl.tasks.resolver.DNSResolverTask - ServiceResolver(fe80-0-0-0-aede-48ff-fe00-1122-en5.local.).run() exception
java.io.IOException: No route to host (sendto failed)
	at java.net.PlainDatagramSocketImpl.send(Native Method)
	at java.net.DatagramSocket.send(DatagramSocket.java:693)
	at javax.jmdns.impl.JmDNSImpl.send(JmDNSImpl.java:1595)
	at javax.jmdns.impl.tasks.resolver.DNSResolverTask.run(DNSResolverTask.java:74)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
[fe80-0-0-0-aede-48ff-fe00-1122-en5.local..recover()] WARN javax.jmdns.impl.JmDNSImpl - RECOVERING
[JmDNS(fe80-0-0-0-aede-48ff-fe00-1122-en5.local.).State.Timer] WARN javax.jmdns.impl.tasks.state.DNSStateTask - Canceler(fe80-0-0-0-aede-48ff-fe00-1122-en5.local.).run() exception
java.io.IOException: No route to host (sendto failed)
	at java.net.PlainDatagramSocketImpl.send(Native Method)
	at java.net.DatagramSocket.send(DatagramSocket.java:693)
	at javax.jmdns.impl.JmDNSImpl.send(JmDNSImpl.java:1595)
	at javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:131)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
In file included from sketch/ab-hivemind-main.cpp:79:0:
/Users/cpbotha/Dropbox/work/code/arduino/libraries/FastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.006
 #    pragma message "FastLED version 3.001.006"
                     ^
[fe80-0-0-0-aede-48ff-fe00-1122-en5.local..recover()] WARN javax.jmdns.impl.DNSStatefulObject$DefaultImplementation - Wait for canceled timed out: DNS: fe80-0-0-0-aede-48ff-fe00-1122-en5.local. [fe80:0:0:0:aede:48ff:fe00:1122%en5/fe80:0:0:0:aede:48ff:fe00:1122%en5] state: canceling 1 task: null
[fe80-0-0-0-aede-48ff-fe00-1122-en5.local..recover()] WARN javax.jmdns.impl.JmDNSImpl - fe80-0-0-0-aede-48ff-fe00-1122-en5.local.recover() Could not recover we are Down!
Archiving built core (caching) in: /var/folders/jf/8pjr5bb176n9mmw1l5mcxlc40000gn/T/arduino_cache_696128/core/core_arduino_samd_mzero_bl_5d2767de36b39328154990997ebcbb2f.a
Sketch uses 22380 bytes (8%) of program storage space. Maximum is 262144 bytes.

real	0m30.989s
user	0m10.198s
sys	0m2.113s

Arduino 1.9 beta verify output

$ time ~/Downloads/Arduino.app/Contents/MacOS/Arduino --verify ab-hivemind.ino
Loading configuration...
Initializing packages...
Preparing boards...
Verifying...
[JmDNS(meepmbp17.local.).State.Timer] WARN javax.jmdns.impl.tasks.state.DNSStateTask - Prober(meepmbp17.local.).run() exception
java.io.IOException: No route to host (sendto failed)
	at java.net.PlainDatagramSocketImpl.send(Native Method)
	at java.net.DatagramSocket.send(DatagramSocket.java:693)
	at javax.jmdns.impl.JmDNSImpl.send(JmDNSImpl.java:1618)
	at javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:131)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
[meepmbp17.local..recover()] WARN javax.jmdns.impl.JmDNSImpl - RECOVERING
[JmDNS(meepmbp17.local.).State.Timer] WARN javax.jmdns.impl.tasks.state.DNSStateTask - Canceler(meepmbp17.local.).run() exception
java.io.IOException: No route to host (sendto failed)
	at java.net.PlainDatagramSocketImpl.send(Native Method)
	at java.net.DatagramSocket.send(DatagramSocket.java:693)
	at javax.jmdns.impl.JmDNSImpl.send(JmDNSImpl.java:1618)
	at javax.jmdns.impl.tasks.state.DNSStateTask.run(DNSStateTask.java:131)
	at java.util.TimerThread.mainLoop(Timer.java:555)
	at java.util.TimerThread.run(Timer.java:505)
In file included from sketch/ab-hivemind-main.cpp:79:0:
/Users/cpbotha/Dropbox/work/code/arduino/libraries/FastLED/FastLED.h:17:21: note: #pragma message: FastLED version 3.001.006
 #    pragma message "FastLED version 3.001.006"
                     ^
Sketch uses 22376 bytes (8%) of program storage space. Maximum is 262144 bytes.

real	0m5.764s
user	0m11.668s
sys	0m2.385s
@facchinm
Copy link
Member

facchinm commented Apr 3, 2018

@cpbotha the behaviour has been spotted some time ago (#6350) and hopefully solved by spawning the discoverers as threads. About the exceptions raised by jmdns, there is no clever way to get rid of them except recompiling the whole library, since they are deeply buried in the code.
If you don't mind, I'd close the issue to keep track only on #6350

@facchinm facchinm closed this as completed Apr 3, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants