summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2022-01-19 10:45:33 +0700
committerGitHub <[email protected]>2022-01-19 10:45:33 +0700
commit0b6b4f24412e9d926ed4cd08c6ab5a49dfb9696b (patch)
tree0d4d40d3efa539dd41989e2f7b52949a93a3c659 /src
parent983abfd6d81f780c079df284b0329d5ef780d21e (diff)
parent161ba73c8b01c6de637309fbfc8c6dcea58c9d06 (diff)
Merge pull request #1286 from hathach/fix-fifo-mutex-when-full
fix locked mutex when fifo is full
Diffstat (limited to 'src')
-rw-r--r--src/common/tusb_fifo.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/common/tusb_fifo.c b/src/common/tusb_fifo.c
index 564687e02..0d35405db 100644
--- a/src/common/tusb_fifo.c
+++ b/src/common/tusb_fifo.c
@@ -741,21 +741,28 @@ bool tu_fifo_write(tu_fifo_t* f, const void * data)
{
_ff_lock(f->mutex_wr);
- uint16_t w = f->wr_idx;
+ bool ret;
+ uint16_t const w = f->wr_idx;
- if ( _tu_fifo_full(f, w, f->rd_idx) && !f->overwritable ) return false;
+ if ( _tu_fifo_full(f, w, f->rd_idx) && !f->overwritable )
+ {
+ ret = false;
+ }else
+ {
+ uint16_t wRel = get_relative_pointer(f, w);
- uint16_t wRel = get_relative_pointer(f, w);
+ // Write data
+ _ff_push(f, data, wRel);
- // Write data
- _ff_push(f, data, wRel);
+ // Advance pointer
+ f->wr_idx = advance_pointer(f, w, 1);
- // Advance pointer
- f->wr_idx = advance_pointer(f, w, 1);
+ ret = true;
+ }
_ff_unlock(f->mutex_wr);
- return true;
+ return ret;
}
/******************************************************************************/