Defer web requests if JSON lock contended

Use the web server's queuing mechanism to call us back later.
This commit is contained in:
Will Miles 2024-08-04 14:02:05 -04:00
parent dc317220b3
commit bec7e54f7f
3 changed files with 6 additions and 3 deletions

View File

@ -1060,7 +1060,7 @@ void serveJson(AsyncWebServerRequest* request)
} }
if (!requestJSONBufferLock(17)) { if (!requestJSONBufferLock(17)) {
serveJsonError(request, 503, ERR_NOBUF); request->deferResponse();
return; return;
} }
// releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer) // releaseJSONBufferLock() will be called when "response" is destroyed (from AsyncWebServer)

View File

@ -628,7 +628,10 @@ void handleSettingsSet(AsyncWebServerRequest *request, byte subPage)
//USERMODS //USERMODS
if (subPage == SUBPAGE_UM) if (subPage == SUBPAGE_UM)
{ {
if (!requestJSONBufferLock(5)) return; if (!requestJSONBufferLock(5)) {
request->deferResponse();
return;
}
// global I2C & SPI pins // global I2C & SPI pins
int8_t hw_sda_pin = !request->arg(F("SDA")).length() ? -1 : (int)request->arg(F("SDA")).toInt(); int8_t hw_sda_pin = !request->arg(F("SDA")).length() ? -1 : (int)request->arg(F("SDA")).toInt();

View File

@ -288,7 +288,7 @@ void initServer()
bool isConfig = false; bool isConfig = false;
if (!requestJSONBufferLock(14)) { if (!requestJSONBufferLock(14)) {
serveJsonError(request, 503, ERR_NOBUF); request->deferResponse();
return; return;
} }