fix: fail fast on app route backpressure
This commit is contained in:
+20
-9
@@ -11,7 +11,7 @@
|
||||
#include "debug_log.h"
|
||||
#include "route_msg.h"
|
||||
|
||||
static void tcp_server_worker(struct netconn *conn, uint8_t link_index)
|
||||
static err_t tcp_server_worker(struct netconn *conn, uint8_t link_index)
|
||||
{
|
||||
struct netbuf *buf;
|
||||
const device_config_t *cfg = config_get();
|
||||
@@ -19,6 +19,7 @@ static void tcp_server_worker(struct netconn *conn, uint8_t link_index)
|
||||
uint8_t src_endpoint = config_link_index_to_endpoint(link_index);
|
||||
err_t err;
|
||||
route_msg_t *tx_msg;
|
||||
route_send_result_t route_result;
|
||||
|
||||
netconn_set_recvtimeout(conn, 10);
|
||||
|
||||
@@ -29,13 +30,21 @@ static void tcp_server_worker(struct netconn *conn, uint8_t link_index)
|
||||
void *data;
|
||||
uint16_t len;
|
||||
netbuf_data(buf, &data, &len);
|
||||
(void)route_send(xTcpRxQueue,
|
||||
src_endpoint,
|
||||
uart_endpoint,
|
||||
(link_index == CONFIG_LINK_S1) ? ROUTE_CONN_S1 : ROUTE_CONN_S2,
|
||||
(const uint8_t *)data,
|
||||
len,
|
||||
pdMS_TO_TICKS(10));
|
||||
route_result = route_send(xTcpRxQueue,
|
||||
src_endpoint,
|
||||
uart_endpoint,
|
||||
(link_index == CONFIG_LINK_S1) ? ROUTE_CONN_S1 : ROUTE_CONN_S2,
|
||||
(const uint8_t *)data,
|
||||
len,
|
||||
pdMS_TO_TICKS(10));
|
||||
if (route_result != ROUTE_SEND_OK) {
|
||||
debug_log_printf("[SRV] idx=%u rx-route-fail rc=%s len=%u\r\n",
|
||||
(unsigned int)link_index,
|
||||
route_send_result_to_str(route_result),
|
||||
(unsigned int)len);
|
||||
netbuf_delete(buf);
|
||||
return ERR_CLSD;
|
||||
}
|
||||
} while (netbuf_next(buf) >= 0);
|
||||
netbuf_delete(buf);
|
||||
} else if (err != ERR_TIMEOUT) {
|
||||
@@ -46,10 +55,12 @@ static void tcp_server_worker(struct netconn *conn, uint8_t link_index)
|
||||
err = netconn_write(conn, tx_msg->data, tx_msg->len, NETCONN_COPY);
|
||||
route_msg_free(tx_msg);
|
||||
if (err != ERR_OK) {
|
||||
return;
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static void tcp_server_task(uint8_t link_index)
|
||||
|
||||
Reference in New Issue
Block a user