From 5549d0493d6f60f4ed429ee2c893ed2129118fb9 Mon Sep 17 00:00:00 2001 From: Kaspar Schleiser Date: Mon, 1 Jun 2015 12:18:39 +0200 Subject: [PATCH] sys: newlib: remove _read_r() race --- sys/newlib/syscalls.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sys/newlib/syscalls.c b/sys/newlib/syscalls.c index a6aa78272e1d..29c3058daa2d 100644 --- a/sys/newlib/syscalls.c +++ b/sys/newlib/syscalls.c @@ -203,11 +203,13 @@ int _open_r(struct _reent *r, const char *name, int mode) int _read_r(struct _reent *r, int fd, void *buffer, unsigned int count) { #ifndef MODULE_UART0 + int res; mutex_lock(&uart_rx_mutex); - + unsigned state = disableIRQ(); count = count < rx_buf.avail ? count : rx_buf.avail; - - return ringbuffer_get(&rx_buf, (char*)buffer, count); + res = ringbuffer_get(&rx_buf, (char*)buffer, count); + restoreIRQ(state); + return res; #else char *res = (char*)buffer; res[0] = (char)uart0_readc();