diff options
| author | Ha Thach <[email protected]> | 2022-01-19 10:45:33 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-01-19 10:45:33 +0700 |
| commit | 0b6b4f24412e9d926ed4cd08c6ab5a49dfb9696b (patch) | |
| tree | 0d4d40d3efa539dd41989e2f7b52949a93a3c659 /src | |
| parent | 983abfd6d81f780c079df284b0329d5ef780d21e (diff) | |
| parent | 161ba73c8b01c6de637309fbfc8c6dcea58c9d06 (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.c | 23 |
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; } /******************************************************************************/ |
