From d860453bae023021129f8097ce39b56a4b1e3fac Mon Sep 17 00:00:00 2001 From: algin Date: Wed, 11 Oct 2023 10:23:04 +0300 Subject: [PATCH] =?UTF-8?q?fix(UML-1780):=20=D0=A3=D0=BC=D0=B5=D0=BD=D1=8C?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=20=D0=BC=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D1=80=20=D0=B1=D1=83=D1=84=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/free_rtos/ethernet_ip/eth_udp_client.cpp | 11 +++++++---- components/free_rtos/ethernet_ip/eth_udp_client.hpp | 4 ++-- components/free_rtos/ethernet_ip/eth_udp_server.hpp | 8 +++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/components/free_rtos/ethernet_ip/eth_udp_client.cpp b/components/free_rtos/ethernet_ip/eth_udp_client.cpp index 52b1a30..744693f 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_client.cpp +++ b/components/free_rtos/ethernet_ip/eth_udp_client.cpp @@ -36,10 +36,13 @@ void free_rtos::EthUpdClient::put_data(uint32_t src_ip, uint8_t * p_data, uint32 { LockGuard lock(rx_mut_); /// ��������� ������� - /// ������������ ������������ ������ ������ � ������ - if (buff_.size() < max_buf_size) { - buff_.insert(buff_.end(), p_data, p_data + len); + if(buff_.size() + len > max_buf_size) { + DebugP_log((char *)"Warning ! UDP client buffer overflow !\r\n"); + + return; } + + buff_.insert(buff_.end(), p_data, p_data + len); } src_ip_ = src_ip; @@ -76,7 +79,7 @@ int32_t free_rtos::EthUpdClient::read(uint8_t * p_data, uint32_t len) } /// ���� ����� ����, ������� ������ ������ - while (buff_.empty()) { // Не заменять на if ! Иначе следующий прием получит пустой буфер т.к. семафор может быть не сброшен ! + while (buff_.empty()) { rx_sem_.pend(); } diff --git a/components/free_rtos/ethernet_ip/eth_udp_client.hpp b/components/free_rtos/ethernet_ip/eth_udp_client.hpp index 2223ff1..9816a39 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_client.hpp +++ b/components/free_rtos/ethernet_ip/eth_udp_client.hpp @@ -33,7 +33,7 @@ public: int32_t read_async(uint8_t * p_data, uint32_t len); template - int32_t read_async(std::vector& data, uint32_t len = 65535) + int32_t read_async(std::vector& data, uint32_t len) { if (len == 0) { return 0; @@ -83,7 +83,7 @@ private: } private: - const uint32_t max_buf_size = 0x100000; // 1Mb + const uint32_t max_buf_size = 0x10000; // 0x10000 - 65536, 0x11CA - 4554, 0x0BDC - 3036, 0x100000 - 1Mb Semaphore rx_sem_; Mutex rx_mut_; diff --git a/components/free_rtos/ethernet_ip/eth_udp_server.hpp b/components/free_rtos/ethernet_ip/eth_udp_server.hpp index b4ce098..18f42b8 100644 --- a/components/free_rtos/ethernet_ip/eth_udp_server.hpp +++ b/components/free_rtos/ethernet_ip/eth_udp_server.hpp @@ -32,7 +32,13 @@ public: virtual int32_t select(uint32_t ticks = SystemP_WAIT_FOREVER) override { - return rx_sem_.pend(ticks); + int32_t sts; + + do { + sts = rx_sem_.pend(ticks); + } while(sts != SystemP_SUCCESS); + + return sts; } private: