diff --git a/esphome/core/freertos_queue.h b/esphome/core/freertos_queue.h index d264489663..9ce4fe3543 100644 --- a/esphome/core/freertos_queue.h +++ b/esphome/core/freertos_queue.h @@ -29,7 +29,7 @@ template class FreeRTOSQueue { FreeRTOSQueue() : dropped_count_(0) { this->handle_ = xQueueCreate(SIZE, sizeof(T *)); } bool push(T *element) { - if (element == nullptr) + if (element == nullptr || this->handle_ == nullptr) return false; if (xQueueSend(this->handle_, &element, 0) != pdPASS) { @@ -40,6 +40,9 @@ template class FreeRTOSQueue { } T *pop() { + if (this->handle_ == nullptr) + return nullptr; + T *element; if (xQueueReceive(this->handle_, &element, 0) != pdTRUE) { return nullptr; @@ -57,11 +60,23 @@ template class FreeRTOSQueue { void increment_dropped_count() { this->dropped_count_++; } - bool empty() const { return uxQueueMessagesWaiting(this->handle_) == 0; } + bool empty() const { + if (this->handle_ == nullptr) + return true; + return uxQueueMessagesWaiting(this->handle_) == 0; + } - bool full() const { return uxQueueSpacesAvailable(this->handle_) == 0; } + bool full() const { + if (this->handle_ == nullptr) + return true; + return uxQueueSpacesAvailable(this->handle_) == 0; + } - size_t size() const { return uxQueueMessagesWaiting(this->handle_); } + size_t size() const { + if (this->handle_ == nullptr) + return 0; + return uxQueueMessagesWaiting(this->handle_); + } protected: QueueHandle_t handle_;