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.
This commit is contained in:
parent
21fb9a0bac
commit
07bd09fc0f
|
@ -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;
|
read_nbytes = (rt_uint32_t)ptr - (rt_uint32_t)buffer;
|
||||||
/* set error code */
|
/* set error code if and only if in thread context */
|
||||||
if (read_nbytes == 0)
|
if (read_nbytes == 0 && !rt_interrupt_get_nest())
|
||||||
{
|
{
|
||||||
rt_set_errno(-RT_EEMPTY);
|
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;
|
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);
|
rt_set_errno(-RT_EFULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue