From 6d54bb148110c9cc5f9a3392052208260a63e8f3 Mon Sep 17 00:00:00 2001
From: LaborEtArs <laboretars@googlemail.ocm>
Date: Mon, 28 Jan 2019 20:58:17 +0100
Subject: [PATCH 1/3] LEAmDNS_Fixes_1_3

---
 libraries/ESP8266mDNS/src/LEAmDNS.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libraries/ESP8266mDNS/src/LEAmDNS.cpp b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
index 43e1a802d9..dbeb33503d 100644
--- a/libraries/ESP8266mDNS/src/LEAmDNS.cpp
+++ b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
@@ -89,7 +89,7 @@ bool MDNSResponder::begin(const char* p_pcHostname) {
     
     bool    bResult = (0 != m_pcHostname);
     
-    if (0 == m_pcHostname) {
+    if (0 == m_pUDPContext) {
         if (_setHostname(p_pcHostname)) {
             
             m_GotIPHandler = WiFi.onStationModeGotIP([this](const WiFiEventStationModeGotIP& pEvent) {

From 6ac7a2c31df89ef6e17c28283a0ba9e1e61061aa Mon Sep 17 00:00:00 2001
From: LaborEtArs <laboretars@googlemail.ocm>
Date: Tue, 29 Jan 2019 19:43:34 +0100
Subject: [PATCH 2/3] LEAmDNS_Fixes_1_3

---
 libraries/ESP8266mDNS/src/LEAmDNS.cpp | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/libraries/ESP8266mDNS/src/LEAmDNS.cpp b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
index dbeb33503d..4ebb186e4a 100644
--- a/libraries/ESP8266mDNS/src/LEAmDNS.cpp
+++ b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
@@ -22,8 +22,11 @@
  *
  */
 
+#include <Schedule.h>
+
 #include "LEAmDNS_Priv.h"
 
+
 namespace esp8266 {
 
 /*
@@ -87,28 +90,30 @@ MDNSResponder::~MDNSResponder(void) {
  */
 bool MDNSResponder::begin(const char* p_pcHostname) {
     
-    bool    bResult = (0 != m_pcHostname);
+    bool    bResult = false;
     
     if (0 == m_pUDPContext) {
         if (_setHostname(p_pcHostname)) {
             
             m_GotIPHandler = WiFi.onStationModeGotIP([this](const WiFiEventStationModeGotIP& pEvent) {
                 (void) pEvent;
-                _restart();
+                // Ensure that _restart() runs in USER context
+                schedule_function(std::bind(&MDNSResponder::_restart, this));
             });
 
             m_DisconnectedHandler = WiFi.onStationModeDisconnected([this](const WiFiEventStationModeDisconnected& pEvent) {
                 (void) pEvent;
-                _restart();
+                // Ensure that _restart() runs in USER context
+                schedule_function(std::bind(&MDNSResponder::_restart, this));
             });
 
             bResult = _restart();
         }
+        DEBUG_EX_ERR(if (!bResult) { DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: FAILED for '%s'!\n"), (p_pcHostname ?: "-")); } );
     }
     else {
         DEBUG_EX_INFO(DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: Ignoring multiple calls (Ignored host domain: '%s')!\n"), (p_pcHostname ?: "-")););
     }
-    DEBUG_EX_ERR(if (!bResult) { DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: FAILED for '%s'!\n"), (p_pcHostname ?: "-")); } );
     return bResult;
 }
 

From b75355254a39812b0356fad1e68e9aa38e00405c Mon Sep 17 00:00:00 2001
From: LaborEtArs <laboretars@googlemail.ocm>
Date: Tue, 29 Jan 2019 20:50:04 +0100
Subject: [PATCH 3/3] Updated LEAmDNSResponder::begin() :x

---
 libraries/ESP8266mDNS/src/LEAmDNS.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libraries/ESP8266mDNS/src/LEAmDNS.cpp b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
index 4ebb186e4a..581e7180a4 100644
--- a/libraries/ESP8266mDNS/src/LEAmDNS.cpp
+++ b/libraries/ESP8266mDNS/src/LEAmDNS.cpp
@@ -112,7 +112,7 @@ bool MDNSResponder::begin(const char* p_pcHostname) {
         DEBUG_EX_ERR(if (!bResult) { DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: FAILED for '%s'!\n"), (p_pcHostname ?: "-")); } );
     }
     else {
-        DEBUG_EX_INFO(DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: Ignoring multiple calls (Ignored host domain: '%s')!\n"), (p_pcHostname ?: "-")););
+        DEBUG_EX_INFO(DEBUG_OUTPUT.printf_P(PSTR("[MDNSResponder] begin: Ignoring multiple calls to begin (Ignored host domain: '%s')!\n"), (p_pcHostname ?: "-")););
     }
     return bResult;
 }