mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-31 07:03:55 +00:00 
			
		
		
		
	Merge branch 'dev' into reduce_main_loop
This commit is contained in:
		| @@ -125,7 +125,16 @@ void DeferredUpdateEventSource::process_deferred_queue_() { | ||||
|     if (this->send(message.c_str(), "state") != DISCARDED) { | ||||
|       // O(n) but memory efficiency is more important than speed here which is why std::vector was chosen | ||||
|       deferred_queue_.erase(deferred_queue_.begin()); | ||||
|       this->consecutive_send_failures_ = 0;  // Reset failure count on successful send | ||||
|     } else { | ||||
|       this->consecutive_send_failures_++; | ||||
|       if (this->consecutive_send_failures_ >= MAX_CONSECUTIVE_SEND_FAILURES) { | ||||
|         // Too many failures, connection is likely dead | ||||
|         ESP_LOGW(TAG, "Closing stuck EventSource connection after %" PRIu16 " failed sends", | ||||
|                  this->consecutive_send_failures_); | ||||
|         this->close(); | ||||
|         this->deferred_queue_.clear(); | ||||
|       } | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
| @@ -164,6 +173,8 @@ void DeferredUpdateEventSource::deferrable_send_state(void *source, const char * | ||||
|     std::string message = message_generator(web_server_, source); | ||||
|     if (this->send(message.c_str(), "state") == DISCARDED) { | ||||
|       deq_push_back_with_dedup_(source, message_generator); | ||||
|     } else { | ||||
|       this->consecutive_send_failures_ = 0;  // Reset failure count on successful send | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -121,6 +121,8 @@ class DeferredUpdateEventSource : public AsyncEventSource { | ||||
|   // footprint is more important than speed here) | ||||
|   std::vector<DeferredEvent> deferred_queue_; | ||||
|   WebServer *web_server_; | ||||
|   uint16_t consecutive_send_failures_{0}; | ||||
|   static constexpr uint16_t MAX_CONSECUTIVE_SEND_FAILURES = 2500;  // ~20 seconds at 125Hz loop rate | ||||
|  | ||||
|   // helper for allowing only unique entries in the queue | ||||
|   void deq_push_back_with_dedup_(void *source, message_generator_t *message_generator); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user