JSON buffer lock error messages

Reduce wait time for lock to 100ms
This commit is contained in:
Blaz Kristan
2024-02-17 11:30:29 +01:00
committed by Frank
parent 22d0675a3b
commit c9611bde73
4 changed files with 22 additions and 9 deletions

View File

@@ -95,7 +95,7 @@ static void doSaveState() {
bool getPresetName(byte index, String& name) bool getPresetName(byte index, String& name)
{ {
if (!requestJSONBufferLock(9)) return false; if (!requestJSONBufferLock(19)) return false;
bool presetExists = false; bool presetExists = false;
if (readObjectFromFileUsingId(getFileName(), index, &doc)) if (readObjectFromFileUsingId(getFileName(), index, &doc))
{ {

View File

@@ -204,10 +204,10 @@ bool requestJSONBufferLock(uint8_t module)
{ {
unsigned long now = millis(); 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) { if (jsonBufferLock) {
DEBUG_PRINT(F("ERROR: Locking JSON buffer failed! (")); DEBUG_PRINT(F("ERROR: Locking JSON buffer failed! (still locked by "));
DEBUG_PRINT(jsonBufferLock); DEBUG_PRINT(jsonBufferLock);
DEBUG_PRINTLN(")"); DEBUG_PRINTLN(")");
return false; // waiting time-outed return false; // waiting time-outed

View File

@@ -136,7 +136,10 @@ void handleSerial()
} else if (next == '{') { //JSON API } else if (next == '{') { //JSON API
bool verboseResponse = false; bool verboseResponse = false;
if (!requestJSONBufferLock(16)) return; if (!requestJSONBufferLock(16)) {
Serial.println(F("{\"error\":3}")); // ERR_NOBUF
return;
}
Serial.setTimeout(100); Serial.setTimeout(100);
DeserializationError error = deserializeJson(doc, Serial); DeserializationError error = deserializeJson(doc, Serial);
if (error) { if (error) {

View File

@@ -41,7 +41,10 @@ void wsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventTyp
} }
bool verboseResponse = false; bool verboseResponse = false;
if (!requestJSONBufferLock(11)) return; if (!requestJSONBufferLock(11)) {
client->text(F("{\"error\":3}")); // ERR_NOBUF
return;
}
DeserializationError error = deserializeJson(doc, data, len); DeserializationError error = deserializeJson(doc, data, len);
JsonObject root = doc.as<JsonObject>(); JsonObject root = doc.as<JsonObject>();
@@ -106,15 +109,22 @@ void sendDataWs(AsyncWebSocketClient * client)
if (!ws.count()) return; if (!ws.count()) return;
AsyncWebSocketMessageBuffer * buffer; 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 = doc.createNestedObject("state"); JsonObject state = doc.createNestedObject("state");
serializeState(state); serializeState(state);
JsonObject info = doc.createNestedObject("info"); JsonObject info = doc.createNestedObject("info");
serializeInfo(info); serializeInfo(info);
size_t len = measureJson(doc); size_t len = measureJson(*pDoc);
DEBUG_PRINTF("JSON buffer size: %u for WS request (%u).\n", doc.memoryUsage(), len); DEBUG_PRINTF("JSON buffer size: %u for WS request (%u).\n", pDoc->memoryUsage(), len);
#ifdef ESP8266 #ifdef ESP8266
size_t heap1 = ESP.getFreeHeap(); // WLEDMM moved into 8266 specific section size_t heap1 = ESP.getFreeHeap(); // WLEDMM moved into 8266 specific section