You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Not strictly related to hardware, so I'm skipping this section
Description
I'm the author of ksIotFrameworkLib (iot library for arduino esp), working extensively with various ESP devices. Recently, I encountered a frustrating issue that led to crashes under specific conditions. The problem was challenging to pinpoint due to its random nature.
During the transition between the provisioning app and the regular operational app, I faced random exceptions:
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
My code is written in modern C++, utilizing unique_ptr as the standard practice. After investigating, I discovered that the root cause of the crash was linked to the mDNS service (an IDF component). Since I use ArduinoOTA without any global instances enabled, this was another area I needed to explore.
And - bingo!
It turns out that the ArduinoOTAClass does not correctly clean up mDNS in its destructor. It should be calling the end() method, but it doesn't. This issue also impacts the ESP8266 framework.
cziter15
changed the title
Lack of proper cleanup in ArduinoOTA class
Lack of proper cleanup in ArduinoOTA class (missing end() in ~ArduinoOTA )
Feb 4, 2025
It was really tricky (and my luck) to find the cause. Actually stacktrace was not pointing to the OTA at all.
Rather it was randomly crashing somewhere after device connected the network. The only thing I've noticed was the logline like "mdns service is already running" or something like this, but this unfortunatelly didn't get my attention earlier.
Board
Not strictly related to hardware, so I'm skipping this section
Description
I'm the author of ksIotFrameworkLib (iot library for arduino esp), working extensively with various ESP devices. Recently, I encountered a frustrating issue that led to crashes under specific conditions. The problem was challenging to pinpoint due to its random nature.
During the transition between the provisioning app and the regular operational app, I faced random exceptions:
Guru Meditation Error: Core 0 panic'ed (LoadProhibited). Exception was unhandled.
My code is written in modern C++, utilizing
unique_ptr
as the standard practice. After investigating, I discovered that the root cause of the crash was linked to the mDNS service (an IDF component). Since I use ArduinoOTA without any global instances enabled, this was another area I needed to explore.And - bingo!
It turns out that the ArduinoOTAClass does not correctly clean up mDNS in its destructor. It should be calling the end() method, but it doesn't. This issue also impacts the ESP8266 framework.
arduino-esp32/libraries/ArduinoOTA/src/ArduinoOTA.cpp
Line 32 in 0302b4d
Workaround
Explicitly invoke the
end()
method in the code that owns ArduinoOTA code before the object is destroyed.The text was updated successfully, but these errors were encountered: