1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

sys/isrpipe/read_timeout: don't set up timer if data is available

This commit is contained in:
Mihai Renea 2024-04-08 16:09:31 +02:00
parent e6bd633eaf
commit 016f074d7e

View File

@ -37,18 +37,20 @@ static void _cb(void *arg)
int isrpipe_read_timeout(isrpipe_t *isrpipe, uint8_t *buffer, size_t count, uint32_t timeout) int isrpipe_read_timeout(isrpipe_t *isrpipe, uint8_t *buffer, size_t count, uint32_t timeout)
{ {
int res; int res = tsrb_get(&isrpipe->tsrb, buffer, count);
if (res > 0) {
return res;
}
_isrpipe_timeout_t _timeout = { .mutex = &isrpipe->mutex, .flag = 0 }; _isrpipe_timeout_t _timeout = { .mutex = &isrpipe->mutex, .flag = 0 };
ztimer_t timer = { .callback = _cb, .arg = &_timeout }; ztimer_t timer = { .callback = _cb, .arg = &_timeout };
ztimer_set(ZTIMER_USEC, &timer, timeout); ztimer_set(ZTIMER_USEC, &timer, timeout);
while (!(res = tsrb_get(&isrpipe->tsrb, buffer, count))) { while ((res = tsrb_get(&isrpipe->tsrb, buffer, count)) == 0) {
mutex_lock(&isrpipe->mutex); mutex_lock(&isrpipe->mutex);
if (_timeout.flag) { if (_timeout.flag) {
res = -ETIMEDOUT; /* timer was consumed */
break; return -ETIMEDOUT;
} }
} }