diff options
| author | Grissiom <[email protected]> | 2013-10-25 20:31:02 +0800 |
|---|---|---|
| committer | Grissiom <[email protected]> | 2013-10-25 20:31:02 +0800 |
| commit | 07bd09fc0fc256e5c53ad3c6157802fd94c9910c (patch) | |
| tree | 599c27f274eb2c35b763f4c6ded411f7a9a0aa24 /components/drivers | |
| parent | 21fb9a0bac9f5eaa57e41e60bab06e9f4dc216ae (diff) | |
serial: set the errno if and only if in thread context
The errno is associated with threads. It will crash the thread if we set
it in interrupt context.
Diffstat (limited to 'components/drivers')
| -rw-r--r-- | components/drivers/serial/serial.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/components/drivers/serial/serial.c b/components/drivers/serial/serial.c index 5e7a8ec814..c4a7ac6980 100644 --- a/components/drivers/serial/serial.c +++ b/components/drivers/serial/serial.c @@ -257,8 +257,8 @@ static rt_size_t rt_serial_read(struct rt_device *dev, } read_nbytes = (rt_uint32_t)ptr - (rt_uint32_t)buffer; - /* set error code */ - if (read_nbytes == 0) + /* set error code if and only if in thread context */ + if (read_nbytes == 0 && !rt_interrupt_get_nest()) { rt_set_errno(-RT_EEMPTY); } @@ -349,7 +349,8 @@ static rt_size_t rt_serial_write(struct rt_device *dev, } write_nbytes = (rt_uint32_t)ptr - (rt_uint32_t)buffer; - if (write_nbytes == 0) + /* set error code if and only if in thread context */ + if (write_nbytes == 0 && !rt_interrupt_get_nest()) { rt_set_errno(-RT_EFULL); } |
