From e5a3942610e00e5337b6d47a486b5e1fc8e4dbe8 Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Sat, 20 Dec 2025 01:14:13 +0100 Subject: [PATCH] fix for "giving a semaphore never taken" --- wled00/e131.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/wled00/e131.cpp b/wled00/e131.cpp index f25d82bf..42a66f01 100644 --- a/wled00/e131.cpp +++ b/wled00/e131.cpp @@ -56,16 +56,18 @@ void handleDDPPacket(e131_packet_t* p) { if (!realtimeOverride || (realtimeMode && useMainSegmentOnly)) { #if defined(ARDUINO_ARCH_ESP32) - if (xSemaphoreTake(busDrawMux, 200) != pdTRUE) { delay(1);} // WLEDMM first acquire drawing permission (wait max 200ms) + // WLEDMM acquire drawing permission (wait max 200ms) before setting pixels + if (xSemaphoreTake(busDrawMux, 200) == pdTRUE) { #endif - for (uint16_t i = start; i < stop; i++) { - setRealtimePixel(i, data[c], data[c+1], data[c+2], ddpChannelsPerLed >3 ? data[c+3] : 0); - c += ddpChannelsPerLed; - pixels++; - } - packets ++; + for (uint16_t i = start; i < stop; i++) { + setRealtimePixel(i, data[c], data[c+1], data[c+2], ddpChannelsPerLed >3 ? data[c+3] : 0); + c += ddpChannelsPerLed; + pixels++; + } + packets ++; #if defined(ARDUINO_ARCH_ESP32) - xSemaphoreGive(busDrawMux); // WLEDMM release drawing permissions + xSemaphoreGive(busDrawMux); // WLEDMM release drawing permissions + } #endif }