diff --git a/os/hal/src/hal_buffers.c b/os/hal/src/hal_buffers.c index c85be601c..f9a62c210 100644 --- a/os/hal/src/hal_buffers.c +++ b/os/hal/src/hal_buffers.c @@ -358,15 +358,11 @@ msg_t ibqGetTimeout(input_buffers_queue_t *ibqp, sysinterval_t timeout) { size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp, size_t n, sysinterval_t timeout) { size_t r = 0; - systime_t deadline; osalDbgCheck(n > 0U); osalSysLock(); - /* Time window for the whole operation.*/ - deadline = osalTimeAddX(osalOsGetSystemTimeX(), timeout); - while (true) { size_t size; @@ -374,24 +370,8 @@ size_t ibqReadTimeout(input_buffers_queue_t *ibqp, uint8_t *bp, if (ibqp->ptr == NULL) { msg_t msg; - /* TIME_INFINITE and TIME_IMMEDIATE are handled differently, no - deadline.*/ - if ((timeout == TIME_INFINITE) || (timeout == TIME_IMMEDIATE)) { - msg = ibqGetFullBufferTimeoutS(ibqp, timeout); - } - else { - sysinterval_t next_timeout = osalTimeDiffX(osalOsGetSystemTimeX(), - deadline); - - /* Handling the case where the system time went past the deadline, - in this case next becomes a very high number because the system - time is an unsigned type.*/ - if (next_timeout > timeout) { - osalSysUnlock(); - return r; - } - msg = ibqGetFullBufferTimeoutS(ibqp, next_timeout); - } + /* Getting a data buffer using the specified timeout.*/ + msg = ibqGetFullBufferTimeoutS(ibqp, timeout); /* Anything except MSG_OK interrupts the operation.*/ if (msg != MSG_OK) { @@ -563,7 +543,7 @@ void obqReleaseEmptyBufferI(output_buffers_queue_t *obqp) { * @api */ msg_t obqGetEmptyBufferTimeout(output_buffers_queue_t *obqp, - sysinterval_t timeout) { + sysinterval_t timeout) { msg_t msg; osalSysLock(); @@ -741,15 +721,11 @@ msg_t obqPutTimeout(output_buffers_queue_t *obqp, uint8_t b, size_t obqWriteTimeout(output_buffers_queue_t *obqp, const uint8_t *bp, size_t n, sysinterval_t timeout) { size_t w = 0; - systime_t deadline; osalDbgCheck(n > 0U); osalSysLock(); - /* Time window for the whole operation.*/ - deadline = osalTimeAddX(osalOsGetSystemTimeX(), timeout); - while (true) { size_t size; @@ -757,24 +733,8 @@ size_t obqWriteTimeout(output_buffers_queue_t *obqp, const uint8_t *bp, if (obqp->ptr == NULL) { msg_t msg; - /* TIME_INFINITE and TIME_IMMEDIATE are handled differently, no - deadline.*/ - if ((timeout == TIME_INFINITE) || (timeout == TIME_IMMEDIATE)) { - msg = obqGetEmptyBufferTimeoutS(obqp, timeout); - } - else { - sysinterval_t next_timeout = osalTimeDiffX(osalOsGetSystemTimeX(), - deadline); - - /* Handling the case where the system time went past the deadline, - in this case next becomes a very high number because the system - time is an unsigned type.*/ - if (next_timeout > timeout) { - osalSysUnlock(); - return w; - } - msg = obqGetEmptyBufferTimeoutS(obqp, next_timeout); - } + /* Getting an empty buffer using the specified timeout.*/ + msg = obqGetEmptyBufferTimeoutS(obqp, timeout); /* Anything except MSG_OK interrupts the operation.*/ if (msg != MSG_OK) { diff --git a/readme.txt b/readme.txt index 3ca0cea77..ae5bbe5c5 100644 --- a/readme.txt +++ b/readme.txt @@ -141,6 +141,8 @@ - EX: Updated LIS302DL to 1.1.0 (backported to 18.2.1). - EX: Updated LPS25H to 1.1.0 (backported to 18.2.1). - EX: Updated LSM303DLHC to 1.1.0 (backported to 18.2.1). +- HAL: Fixed invalid timeout calculation in hal_buffers (bug #963)(backported + to 18.2.2 and 17.6.5). - RT: Fixed invalid parameter in CH_CFG_SYSTEM_INIT_HOOK hook macro (bug #962)(backported to 18.2.2). - OTH: Fixed demos failing to compile (bug #961)(backported to 18.2.2). @@ -160,7 +162,7 @@ 18.2.2 and 17.6.5). - HAL: Fixed wrong registry entries for STM32F030x4 (bug #952)(backported to 18.2.2). -- HAL: Fixed Invalid divider settings in Serial and UART STM32 drivers +- HAL: Fixed invalid divider settings in Serial and UART STM32 drivers when USART_CR1_OVER8 is specified (bug #951)(backported to 18.2.2 and 17.6.5). - NIL: Fixed missing extern declaration in IAR Cortex-M port (bug #950) diff --git a/testhal/STM32/multi/USB_CDC/debug/STM32-USB_CDC (Select ELF file)(OpenOCD, Flash and Run).launch b/testhal/STM32/multi/USB_CDC/debug/STM32-USB_CDC (Select ELF file)(OpenOCD, Flash and Run).launch index b2ff87d9a..a1bed1782 100644 --- a/testhal/STM32/multi/USB_CDC/debug/STM32-USB_CDC (Select ELF file)(OpenOCD, Flash and Run).launch +++ b/testhal/STM32/multi/USB_CDC/debug/STM32-USB_CDC (Select ELF file)(OpenOCD, Flash and Run).launch @@ -1,52 +1,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +