throttle polling events when message queue gets filled up

a proof of concept, might help on long/large responces with user callbacks

(cherry picked from commit 18bbb3318547bde7a34a84229227ea1f5b80cc72)
This commit is contained in:
Emil Muratov
2024-12-10 22:59:08 +09:00
committed by Mathieu Carbou
parent 67f0fa607c
commit ba3fa2a2ca

View File

@@ -302,6 +302,10 @@ static int8_t _tcp_connected(void * arg, tcp_pcb * pcb, int8_t err) {
}
static int8_t _tcp_poll(void * arg, struct tcp_pcb * pcb) {
// throttle polling events queing when event queue is getting filled up, let it handle _onack's
if (uxQueueMessagesWaiting(_async_queue) > (rand() % CONFIG_ASYNC_TCP_QUEUE_SIZE / 2 + CONFIG_ASYNC_TCP_QUEUE_SIZE / 4) )
return ERR_OK;
//ets_printf("+P: 0x%08x\n", pcb);
lwip_event_packet_t * e = (lwip_event_packet_t *)malloc(sizeof(lwip_event_packet_t));
e->event = LWIP_TCP_POLL;