JSON buffer lock error messages
Reduce wait time for lock to 100ms
This commit is contained in:
		| @@ -83,7 +83,7 @@ static void doSaveState() { | ||||
|  | ||||
| bool getPresetName(byte index, String& name) | ||||
| { | ||||
|   if (!requestJSONBufferLock(9)) return false; | ||||
|   if (!requestJSONBufferLock(19)) return false; | ||||
|   bool presetExists = false; | ||||
|   if (readObjectFromFileUsingId(getFileName(), index, pDoc)) | ||||
|   { | ||||
|   | ||||
| @@ -215,10 +215,10 @@ bool requestJSONBufferLock(uint8_t module) | ||||
|   } | ||||
|   unsigned long now = millis(); | ||||
|  | ||||
|   while (jsonBufferLock && millis()-now < 1000) delay(1); // wait for a second for buffer lock | ||||
|   while (jsonBufferLock && millis()-now < 100) delay(1); // wait for fraction for buffer lock | ||||
|  | ||||
|   if (millis()-now >= 1000) { | ||||
|     DEBUG_PRINT(F("ERROR: Locking JSON buffer failed! (")); | ||||
|   if (jsonBufferLock) { | ||||
|     DEBUG_PRINT(F("ERROR: Locking JSON buffer failed! (still locked by ")); | ||||
|     DEBUG_PRINT(jsonBufferLock); | ||||
|     DEBUG_PRINTLN(")"); | ||||
|     return false; // waiting time-outed | ||||
|   | ||||
| @@ -113,7 +113,10 @@ void handleSerial() | ||||
|  | ||||
|         } else if (next == '{') { //JSON API | ||||
|           bool verboseResponse = false; | ||||
|           if (!requestJSONBufferLock(16)) return; | ||||
|           if (!requestJSONBufferLock(16)) { | ||||
|             Serial.println(F("{\"error\":3}")); // ERR_NOBUF | ||||
|             return; | ||||
|           } | ||||
|           Serial.setTimeout(100); | ||||
|           DeserializationError error = deserializeJson(*pDoc, Serial); | ||||
|           if (error) { | ||||
|   | ||||
| @@ -285,7 +285,10 @@ void initServer() | ||||
|     bool verboseResponse = false; | ||||
|     bool isConfig = false; | ||||
|  | ||||
|     if (!requestJSONBufferLock(14)) return; | ||||
|     if (!requestJSONBufferLock(14)) { | ||||
|       serveJsonError(request, 503, ERR_NOBUF); | ||||
|       return; | ||||
|     } | ||||
|  | ||||
|     DeserializationError error = deserializeJson(*pDoc, (uint8_t*)(request->_tempObject)); | ||||
|     JsonObject root = pDoc->as<JsonObject>(); | ||||
|   | ||||
| @@ -36,7 +36,10 @@ void wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventTyp | ||||
|         } | ||||
|  | ||||
|         bool verboseResponse = false; | ||||
|         if (!requestJSONBufferLock(11)) return; | ||||
|         if (!requestJSONBufferLock(11)) { | ||||
|           client->text(F("{\"error\":3}")); // ERR_NOBUF | ||||
|           return; | ||||
|         } | ||||
|  | ||||
|         DeserializationError error = deserializeJson(*pDoc, data, len); | ||||
|         JsonObject root = pDoc->as<JsonObject>(); | ||||
| @@ -101,7 +104,14 @@ void sendDataWs(AsyncWebSocketClient * client) | ||||
|   if (!ws.count()) return; | ||||
|   AsyncWebSocketMessageBuffer * buffer; | ||||
|  | ||||
|   if (!requestJSONBufferLock(12)) return; | ||||
|   if (!requestJSONBufferLock(12)) { | ||||
|     if (client) { | ||||
|       client->text(F("{\"error\":3}")); // ERR_NOBUF | ||||
|     } else { | ||||
|       ws.textAll(F("{\"error\":3}")); // ERR_NOBUF | ||||
|     } | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   JsonObject state = pDoc->createNestedObject("state"); | ||||
|   serializeState(state); | ||||
| @@ -109,7 +119,7 @@ void sendDataWs(AsyncWebSocketClient * client) | ||||
|   serializeInfo(info); | ||||
|  | ||||
|   size_t len = measureJson(*pDoc); | ||||
|   DEBUG_PRINTF("JSON buffer size: %u for WS request (%u).\n", pDoc->memoryUsage(), len); | ||||
|   DEBUG_PRINTF_P(PSTR("JSON buffer size: %u for WS request (%u).\n"), pDoc->memoryUsage(), len); | ||||
|  | ||||
|   size_t heap1 = ESP.getFreeHeap(); | ||||
|   DEBUG_PRINT(F("heap ")); DEBUG_PRINTLN(ESP.getFreeHeap()); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Blaz Kristan
					Blaz Kristan