mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Add hack of explicitly locking stdout
This shouldn't be necessary as stdout is already locked by libc (see comment.) Not sure which part isn't working.
This commit is contained in:
parent
bd2f9e03f0
commit
94104f0fe8
@ -138,6 +138,13 @@ int _open_r(struct _reent *r, const char * path, int flags, int mode) {
|
|||||||
ssize_t _write_r(struct _reent *r, int fd, const void * data, size_t size) {
|
ssize_t _write_r(struct _reent *r, int fd, const void * data, size_t size) {
|
||||||
const char* p = (const char*) data;
|
const char* p = (const char*) data;
|
||||||
if (fd == STDOUT_FILENO) {
|
if (fd == STDOUT_FILENO) {
|
||||||
|
/* THIS IS A HACK!!! The stdout "file" should be locked while
|
||||||
|
this code is called (it's locked fflush.c:280 before
|
||||||
|
__sflush_r is called.) It shouldn't be necessary to
|
||||||
|
re-lock, but due to some unknown bug it is...
|
||||||
|
*/
|
||||||
|
static _lock_t stdout_lock;
|
||||||
|
_lock_acquire_recursive(&stdout_lock);
|
||||||
while(size--) {
|
while(size--) {
|
||||||
#if CONFIG_NEWLIB_STDOUT_ADDCR
|
#if CONFIG_NEWLIB_STDOUT_ADDCR
|
||||||
if (*p=='\n') {
|
if (*p=='\n') {
|
||||||
@ -147,6 +154,7 @@ ssize_t _write_r(struct _reent *r, int fd, const void * data, size_t size) {
|
|||||||
uart_tx_one_char(*p);
|
uart_tx_one_char(*p);
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
_lock_release_recursive(&stdout_lock);
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user